summaryrefslogtreecommitdiff
path: root/cont.c
diff options
context:
space:
mode:
authorusa <usa@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2007-07-08 17:19:01 +0000
committerusa <usa@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2007-07-08 17:19:01 +0000
commita6ae274c3b06174401276fde2636f17720508532 (patch)
treeead1d991e5e1f87a98252c8b2fb4d31e0ca590c1 /cont.c
parentf880de86edc7eacd6b37c5d0b18956a7117d6564 (diff)
* cont.c (cont_restore_1): workaround for x64-mswin64's SEH.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@12725 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'cont.c')
-rw-r--r--cont.c9
1 files changed, 9 insertions, 0 deletions
diff --git a/cont.c b/cont.c
index 3a7f7ee235..914eed4ccc 100644
--- a/cont.c
+++ b/cont.c
@@ -237,6 +237,15 @@ cont_restore_1(rb_context_t *cont)
th->first_proc = sth->first_proc;
/* restore machine stack */
+#ifdef _M_AMD64
+ {
+ /* workaround for x64 SEH */
+ jmp_buf buf;
+ setjmp(buf);
+ ((_JUMP_BUFFER*)(&cont->jmpbuf))->Frame =
+ ((_JUMP_BUFFER*)(&buf))->Frame;
+ }
+#endif
if (cont->machine_stack_src) {
MEMCPY(cont->machine_stack_src, cont->machine_stack,
VALUE, cont->machine_stack_size);