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
This commit is contained in:
Lars Kanis 2019-11-04 11:00:13 +01:00 коммит произвёл Samuel Williams
Родитель 7c07300491
Коммит 853d91a04a
1 изменённых файлов: 1 добавлений и 1 удалений

Просмотреть файл

@ -42,7 +42,7 @@ static inline void coroutine_initialize(
*--context->stack_pointer = (void*)start; *--context->stack_pointer = (void*)start;
/* Windows Thread Information Block */ /* 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*)top; /* fs:[4] */
*--context->stack_pointer = (void*)stack; /* fs:[8] */ *--context->stack_pointer = (void*)stack; /* fs:[8] */