summaryrefslogtreecommitdiff
path: root/eval.c
diff options
context:
space:
mode:
authormatz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2003-12-20 15:45:15 +0000
committermatz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2003-12-20 15:45:15 +0000
commite91e9e7bbf1d93cdff89878b776a7824a9bc2d99 (patch)
treedb5ce495631901ac5458a7373cfcb0bae9e2fc56 /eval.c
parentbb4f36de3a032909c90f6fa72f2134f198958145 (diff)
* eval.c (rb_with_disable_interrupt): prohibit thread context
switch during proc execution. [ruby-dev:21899] git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@5232 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'eval.c')
-rw-r--r--eval.c12
1 files changed, 7 insertions, 5 deletions
diff --git a/eval.c b/eval.c
index a8f68392b9..6369df8025 100644
--- a/eval.c
+++ b/eval.c
@@ -4739,11 +4739,13 @@ rb_with_disable_interrupt(proc, data)
int status;
DEFER_INTS;
- PUSH_TAG(PROT_NONE);
- if ((status = EXEC_TAG()) == 0) {
- result = (*proc)(data);
- }
- POP_TAG();
+ RUBY_CRITICAL(
+ PUSH_TAG(PROT_NONE);
+ if ((status = EXEC_TAG()) == 0) {
+ result = (*proc)(data);
+ }
+ POP_TAG();
+ );
ALLOW_INTS;
if (status) JUMP_TAG(status);