diff options
Diffstat (limited to 'signal.c')
-rw-r--r-- | signal.c | 20 |
1 files changed, 11 insertions, 9 deletions
@@ -554,16 +554,18 @@ rb_get_next_signal(void) { int i, sig = 0; - for (i=1; i<RUBY_NSIG; i++) { - if (signal_buff.cnt[i] > 0) { - rb_disable_interrupt(); - { - ATOMIC_DEC(signal_buff.cnt[i]); - ATOMIC_DEC(signal_buff.size); + if (signal_buff.size != 0) { + for (i=1; i<RUBY_NSIG; i++) { + if (signal_buff.cnt[i] > 0) { + rb_disable_interrupt(); + { + ATOMIC_DEC(signal_buff.cnt[i]); + ATOMIC_DEC(signal_buff.size); + } + rb_enable_interrupt(); + sig = i; + break; } - rb_enable_interrupt(); - sig = i; - break; } } return sig; |