diff options
| author | matz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2005-10-19 14:12:04 +0000 |
|---|---|---|
| committer | matz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2005-10-19 14:12:04 +0000 |
| commit | 013decae26ae07ffeaef655eafffa0475ff491db (patch) | |
| tree | 7145fac9656a81aa73ccd6a425d5d55c80ef9753 /rubysig.h | |
| parent | aeed3beea26651761cda1831ef3ee1544bcbd689 (diff) | |
| download | ruby-013decae26ae07ffeaef655eafffa0475ff491db.tar.gz ruby-013decae26ae07ffeaef655eafffa0475ff491db.tar.xz ruby-013decae26ae07ffeaef655eafffa0475ff491db.zip | |
* rubysig.h (CHECK_INTS): prevent signal handler to run during
critical section. [ruby-core:04039]
* eval.c (load_wait): need not to call rb_thread_schedule()
explicitly. [ruby-core:04039]
* eval.c (rb_thread_schedule): clear rb_thread_critical.
[ruby-core:04039]
* st.c (st_free_table): do not call free() but xfree().
[ruby-core:06205]
git-svn-id: http://svn.ruby-lang.org/repos/ruby/branches/ruby_1_8@9417 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'rubysig.h')
| -rw-r--r-- | rubysig.h | 17 |
1 files changed, 7 insertions, 10 deletions
@@ -82,10 +82,9 @@ void rb_thread_schedule _((void)); #if defined(HAVE_SETITIMER) || defined(_THREAD_SAFE) RUBY_EXTERN int rb_thread_pending; # define CHECK_INTS do {\ - if (!rb_prohibit_interrupt) {\ + if (!(rb_prohibit_interrupt | rb_thread_critical)) {\ + if (rb_thread_pending) rb_thread_schedule();\ if (rb_trap_pending) rb_trap_exec();\ - if (rb_thread_pending && !rb_thread_critical)\ - rb_thread_schedule();\ }\ } while (0) #else @@ -93,15 +92,13 @@ RUBY_EXTERN int rb_thread_pending; RUBY_EXTERN int rb_thread_tick; #define THREAD_TICK 500 #define CHECK_INTS do {\ - if (!rb_prohibit_interrupt) {\ - if (rb_trap_pending) rb_trap_exec();\ - if (!rb_thread_critical) {\ - if (rb_thread_tick-- <= 0) {\ - rb_thread_tick = THREAD_TICK;\ - rb_thread_schedule();\ - }\ + if (!(rb_prohibit_interrupt | rb_thread_critical)) {\ + if (rb_thread_tick-- <= 0) {\ + rb_thread_tick = THREAD_TICK; + rb_thread_schedule(); }\ }\ + if (rb_trap_pending) rb_trap_exec();\ } while (0) #endif |
