From df62161d7e1e7e1878e6e4c834b61ebcc15b4f67 Mon Sep 17 00:00:00 2001 From: nobu Date: Fri, 17 Jul 2015 07:28:53 +0000 Subject: [PATCH] RUBY_VM_CHECK_INTS: eval the argument only once * vm_core.h (RUBY_VM_CHECK_INTS): evaluate the argument only once to get rid of inadvertent side effects. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@51281 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- vm_core.h | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/vm_core.h b/vm_core.h index 5de066b883..4055e79d1d 100644 --- a/vm_core.h +++ b/vm_core.h @@ -1090,11 +1090,14 @@ void rb_threadptr_pending_interrupt_clear(rb_thread_t *th); void rb_threadptr_pending_interrupt_enque(rb_thread_t *th, VALUE v); int rb_threadptr_pending_interrupt_active_p(rb_thread_t *th); -#define RUBY_VM_CHECK_INTS(th) do { \ - if (UNLIKELY(RUBY_VM_INTERRUPTED_ANY(th))) { \ - rb_threadptr_execute_interrupts(th, 0); \ - } \ -} while (0) +#define RUBY_VM_CHECK_INTS(th) ruby_vm_check_ints(th) +static inline void +ruby_vm_check_ints(rb_thread_t *th) +{ + if (UNLIKELY(RUBY_VM_INTERRUPTED_ANY(th))) { + rb_threadptr_execute_interrupts(th, 0); + } +} /* tracer */ struct rb_trace_arg_struct {