# HG changeset patch # User John D # Date 1472126101 14400 # Node ID 07eb510d88004c0197d69c7a513987de58a07839 # Parent 6eba7555794ab1e67e1de3cee2ede05ab78337f8 For win64 signal handling, use context Rip value * libinterp/corefcn/sighandlers.cc (do_jump_to_enclosing_context): use threadContext.Rip when win64 diff -r 6eba7555794a -r 07eb510d8800 libinterp/corefcn/sighandlers.cc --- a/libinterp/corefcn/sighandlers.cc Thu Aug 25 06:45:15 2016 -0400 +++ b/libinterp/corefcn/sighandlers.cc Thu Aug 25 07:55:01 2016 -0400 @@ -142,21 +142,22 @@ jump_to_enclosing_context_sync (); else { - // 64-bit Windows does not appear to have threadContext.Eip. - // Something else must be done here to allow interrupts to - // properly work across threads. - -#if ! (defined (__MINGW64__) || defined (_WIN64)) CONTEXT threadContext; SuspendThread (thread); threadContext.ContextFlags = CONTEXT_CONTROL; GetThreadContext (thread, &threadContext); + +#if (defined (__MINGW64__) || defined (_WIN64)) + threadContext.Rip = (DWORD64) jump_to_enclosing_context_sync; +#else threadContext.Eip = (DWORD) jump_to_enclosing_context_sync; +#endif + SetThreadContext (thread, &threadContext); + ResumeThread (thread); -#endif } }