summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLars Kanis <kanis@comcard.de>2019-11-04 11:00:13 +0100
committerSamuel Williams <samuel.williams@oriontransfer.co.nz>2019-11-05 15:31:21 +0900
commit853d91a04a4d133fc90b35c90570dc1c656a7922 (patch)
tree546d0d93e1237724e674bcd01b70b58bf87e1bc2
parent7c07300491de502cd94e07fcbf9b30f2df31a0d5 (diff)
downloadruby-853d91a04a4d133fc90b35c90570dc1c656a7922.tar.gz
Fix coroutine support on win32
Ruby master branch currently fails on win32 MINGW at this spec: https://github.com/ruby/spec/blob/master/core/thread/element_set_spec.rb MINGW makes use of setjmp3() implemented in MSVCRT.DLL. This function traverses the SEH list up to a terminating pointer 0xFFFFFFFF. It therefore currently segfaults on NULL. The SEH linked list must be terminated by 0xFFFFFFFF instead of NULL. This fixes the issue mentioned here: https://github.com/ruby/ruby/pull/2279#issuecomment-509508810
-rw-r--r--coroutine/win32/Context.h2
1 files changed, 1 insertions, 1 deletions
diff --git a/coroutine/win32/Context.h b/coroutine/win32/Context.h
index c70b65cd2f..299515ed92 100644
--- a/coroutine/win32/Context.h
+++ b/coroutine/win32/Context.h
@@ -42,7 +42,7 @@ static inline void coroutine_initialize(
*--context->stack_pointer = (void*)start;
/* Windows Thread Information Block */
- *--context->stack_pointer = 0; /* fs:[0] */
+ *--context->stack_pointer = (void*)0xFFFFFFFF; /* fs:[0] */
*--context->stack_pointer = (void*)top; /* fs:[4] */
*--context->stack_pointer = (void*)stack; /* fs:[8] */