aboutsummaryrefslogtreecommitdiffstats
path: root/thread.c
Commit message (Collapse)AuthorAgeFilesLines
* rb_thread_call_without_gvlnobu2012-07-101-9/+8
| | | | | | | | | * include/ruby/thread.h: new header file for thread stuff. * thread.c (rb_thread_call_without_gvl): export. [Feature#4328] returns void* instead of VALUE. [Feature #5543] * thread.c (rb_thread_blocking_region): deprecate. [ruby-core:46295] git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@36355 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* thread.c: unsignednobu2012-07-061-3/+3
| | | | | | | * thread.c (rb_thread_shield_waiting_{inc,dec}): should be unsigned. int is large enough since ruby requires it to be 32bit at least. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@36331 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* ThreadShield: check waiting countnobu2012-07-061-12/+21
| | | | | | * thread.c (rb_thread_shield_waiting_{inc,dec}): check waiting count. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@36329 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* * thread.c: fix typo.nobu2012-07-051-2/+2
| | | | git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@36323 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* ThreadShieldnobu2012-07-051-39/+39
| | | | | | * thread.c (ThreadShield): rename from Barrier. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@36320 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* thread.c: fix rdocnobu2012-07-041-2/+3
| | | | | | | | | * thread.c (rb_thread_blocking_region): fix typo and the description in "Safe C API". ruby_xmalloc(), ruby_xrealloc() never try acquire GVL automatically unless GC runs, but had race condtions without GVL acquired until r36284. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@36302 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* * thread.c (rb_thread_aref): add explanation for why Thread#[] andakr2012-07-021-0/+33
| | | | | | | | | Thread#[]= are fiber-local and not thread-local. reported by Julien A. [ruby-core:41606] [ruby-trunk - Bug #5750] git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@36269 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* adjust style.nobu2012-06-271-4/+7
| | | | git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@36232 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* * vm_core.h: remove lfp (local frame pointer) and renameko12012-06-111-2/+2
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | dfp (dynamic frame pointer) to ep (environment pointer). This change make VM `normal' (similar to other interpreters). Before this commit: Each frame has two env pointers lfp and dfp. lfp points local environment which is method/class/toplevel frame. lfp[0] is block pointer. dfp is block local frame. dfp[0] points previous (parent) environment pointer. lfp == dfp when frame is method/class/toplevel. You can get lfp from dfp by traversing previous environment pointers. After this commit: Each frame has only `ep' to point respective enviornoment. If there is parent environment, then ep[0] points parent envioenment (as dfp). If there are no more environment, then ep[0] points block pointer (as lfp). We call such ep as `LEP' (local EP). We add some macros to get LEP and to detect LEP or not. In short, we replace dfp and lfp with ep and LEP. rb_block_t and rb_binding_t member `lfp' and `dfp' are removed and member `ep' is added. rename rb_thread_t's member `local_lfp' and `local_svar' to `root_lep' and `root_svar'. (VM_EP_PREV_EP(ep)): get previous environment pointer. This macro assume that ep is not LEP. (VM_EP_BLOCK_PTR(ep)): get block pointer. This macro assume that ep is LEP. (VM_EP_LEP_P(ep)): detect ep is LEP or not. (VM_ENVVAL_BLOCK_PTR(ptr)): make block pointer. (VM_ENVVAL_BLOCK_PTR_P(v)): detect v is block pointer. (VM_ENVVAL_PREV_EP_PTR(ptr)): make prev environment pointer. (VM_ENVVAL_PREV_EP_PTR_P(v)): detect v is prev env pointer. * vm.c: apply above changes. (VM_EP_LEP(ep)): get LEP. (VM_CF_LEP(cfp)): get LEP of cfp->ep. (VM_CF_PREV_EP(cfp)): utility function VM_EP_PREV_EP(cfp->ep). (VM_CF_BLOCK_PTR(cfp)): utility function VM_EP_BLOCK_PTR(cfp->ep). * vm.c, vm_eval.c, vm_insnhelper.c, vm_insnhelper.h, insns.def: apply above changes. * cont.c: ditto. * eval.c, eval_intern.h: ditto. * proc.c: ditto. * thread.c: ditto. * vm_dump.c: ditto. * vm_exec.h: fix function name (on vm debug mode). git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@36030 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* * thread.c (vm_living_thread_num): suppress a warning.naruse2012-06-031-1/+1
| | | | git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@35883 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* use RB_TYPE_P() instead of comparison of TYPE()nobu2012-05-231-1/+1
| | | | git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@35763 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* * thread.c, thread_pthread.c: Moved pthread-specific preprocessoryugui2012-05-171-4/+0
| | | | | | | hacks to thread_pthread.c git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@35674 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* Imports Ruby's port to NativeClient (a.k.a NaCl).yugui2012-05-171-1/+9
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Patch by Google Inc. [ruby-core:45073]. * configure.in (RUBY_NACL): New M4 func to configure variables for NaCl. (RUBY_NACL_CHECK_PEPPER_TYPES): New M4 func to check the old names of Pepper interface types. (BTESTRUBY): New variable to specify which ruby should be run on "make btest". NaCl can run the built binary by sel_ldr, but it need rbconfig.rb. So this variable is distinguished from $MINIRUBY. * thread_pthread.c: Disabled some features on NaCl. * io.c: ditto. * process.c: ditto. * signal.c: ditto. * file.c: ditto. * missing/flock.c: ditto. * nacl/pepper_main.c: An example implementation of Pepper application that embeds Ruby. * nacl/example.html: An example of web page that uses the Pepper application. * nacl/nacl-config.rb: Detects variants of NaCl SDK. * nacl/GNUmakefile.in: Makefile template for NaCl specific build process. * nacl/package.rb: script for packaging a NaCl-Ruby embedding application. * nacl/reate_nmf.rb: Wrapper script of create_nmf.py * dln.c (dln_load): Added a hack to call on NaCl. * util.c (ruby_getcwd): Path to the current directort is not available on NaCl. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@35672 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* Revert r35622.naruse2012-05-111-1/+1
| | | | | | | | It breaks bootstraptest/test_exception.rb:388. "* thread.c (rb_threadptr_execute_interrupts_common): th->errinfo is" git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@35623 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* * thread.c (rb_threadptr_execute_interrupts_common): th->errinfo isnaruse2012-05-111-1/+1
| | | | | | | | | not Fixnum, but exception object. This causes test_signal_requiring of test/ruby/test_signal.rb fail if the sub process is killed on waiting IO in lex_io_gets in require itself, not sleep. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@35622 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* * vm_core.h (rb_thread_t#yielding): add a field.ko12012-04-281-7/+5
| | | | | | | | | | | | | | | * thread.c (rb_thread_schedule_limits): set th#yielding while release GVL to yield CPU time. * thread.c (timer_thread_function): skip timer interrupt when th#yielding is true. This patch fixes r35480. * thread.c (rb_threadptr_execute_interrupts_common): revert a patch of r35480. * ChangeLog: add an extended memo of r35480. http://bugs.ruby-lang.org/projects/ruby-trunk/wiki/R35480_ExtendedMemo git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@35486 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* * thread.c (rb_threadptr_execute_interrupts_common):naruse2012-04-261-0/+6
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | handle timer_interrupt only on the first loop for the case to avoid the infinite loop like following case: * there is 2 Ruby threads (3 pthreads) (1) main thread is waiting at gvl_yield:112 (native_cond_wait) (2) sub thread works (3) sub thread waits at gvl_yield:133 (native_mutex_unlock) (4) main thread works (5) main thread goes to gvl_acquire_common (6) main thread call rb_wakeup_timer_thread (7) timer thread set timer interrupt to the main thread (8) main thread works (9) main thread waits at gvl_acquire_common:64 (native_cond_wait) (10) sub tread works (11) set sub thread as the current thread (12) run Ruby thread (13) ...100ms (14) sub thread goes to rb_threadptr_execute_interrupts_common (15) sub thread call rb_thread_schedule_limits (16) sub thread call gvl_release_common (17) sub threads waits at gvl_yield:121 (native_cond_wait) (18) main threads works (19) main thread back to gvl_yield (20) set main thread as the current thread (21) main thread call gvl_yield (22) main thread waits at gvl_yield:112 (native_cond_wait) As described above, the main thread can't escape from rb_threadptr_execute_interrupts_common. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@35480 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* * thread.c (rb_check_deadlock): refine an error message of deadlockmame2012-04-231-1/+1
| | | | | | detection. [ruby-core:44336] [Bug #6288] git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@35449 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* * thread.c (rb_threadptr_execute_interrupts_common): use definedusa2012-03-291-1/+1
| | | | | | | | | | TIME_QUANTUM_USEC instead of a magic number. there is no meanings to use different values for checking interval of interruption and thread switching limits. cf. [Bug #6098] git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@35163 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* * thread.c (rb_mutex_unlock_th): simplified.nobu2012-01-131-15/+4
| | | | git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@34294 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* * thread.c (rb_barrier_waiting): fix potential overflows.nobu2012-01-131-3/+3
| | | | git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@34293 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* * thread.c: changed documentation for "thread-local" variables.ayumin2012-01-031-6/+6
| | | | git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@34198 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* * thread.c (rb_barrier_waiting): save the number of waiting threadsnaruse2011-12-301-20/+20
| | | | | | | | | | | | | in RBASIC()->flags. [ruby-dev:45002] [Bug #5768] * thread.c (rb_barrier_wait): increment and decrement around rb_mutex_lock, and use rb_barrier_waiting(). * thread.c (rb_barrier_release): use rb_barrier_waiting(). * thread.c (rb_barrier_destroy): ditto. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@34163 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* * load.c (load_unlock): release loading barrier and then remove itnobu2011-12-141-2/+15
| | | | | | | | | from loading_table if it is not in-use. [Bug #5754] * thread.c (rb_barrier_release, rb_barrier_destroy): return whether any other threads are waiting on it. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@34039 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* * load.c (load_lock): delete the loading barrier if it has beennobu2011-12-141-2/+12
| | | | | | | | | destroyed. * thread.c (rb_barrier_wait): return nil for recursive lock instead of false, to distinguish it from destroyed barrier. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@34036 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* * load.c (load_unlock): all threads requiring one file shouldnobu2011-12-131-0/+11
| | | | | | | | share same loading barrier, so it must be kept alive while those are waiting on it. [ruby-core:41618] [Bug #5754] git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@34027 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* * io.c, thread.c, ext/pty/pty.c, ext/fiddle/closure.c: useakr2011-11-151-1/+1
| | | | | | | | __linux__ macro for consistency. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@33761 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* * thread.c (do_select): fix cast, tv_sec is time_t.naruse2011-11-091-1/+1
| | | | git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@33682 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* * thread.c (rb_fd_rcopy): suppress warnings on mingw32.nobu2011-11-031-1/+1
| | | | | | | * win32/win32.c (overlapped_socket_io, recvmsg, sendmsg, dupfd): ditto. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@33621 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* * use RB_TYPE_P which is optimized for constant types, instead ofnobu2011-09-291-7/+7
| | | | | | comparison with TYPE. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@33357 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* * thread_pthread.c: make native_fd_select().kosaki2011-09-271-12/+2
| | | | | | | | | * thread.c (do_select): remove #ifdef _WIN32. Instead, use native_fd_select() always. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@33346 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* * thread.c (do_select): remove cygwin specific hack. It's layerkosaki2011-09-271-73/+1
| | | | | | | | | violation and too large hack. * thread.c (cmp_tv, subtract_tv): removed. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@33345 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* * thread.c (rb_fd_rcopy): added an argument guard.kosaki2011-09-141-1/+3
| | | | | | | | Patch by NAKAMURA Usaku. [Bug #5306] [ruby-core:39435] git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@33266 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* * thread.c (rb_thread_select): fix to ignore an argumentkosaki2011-09-121-3/+35
| | | | | | | | | | | | | | | | | | | modification of rb_thread_fd_select(). based on a patch by Eric Wong. [Bug #5306] [ruby-core:39435] * thread.c (rb_fd_rcopy): New. for reverse fd copy. * test/-ext-/old_thread_select/test_old_thread_select.rb (test_old_select_false_positive): test for bug5306. * ext/-test-/old_thread_select/old_thread_select.c (fdset2array): New. convert fdsets to array. * ext/-test-/old_thread_select/old_thread_select.c (old_thread_select): return 'read', 'write', 'except' argument of rb_thread_select() to ruby script. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@33256 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* * thread.c (rb_thread_select): fix a typo to initialize efdsnobu2011-09-091-1/+1
| | | | | | properly. [Bug #5299] [ruby-core:39380] git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@33231 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* * thread.c (rb_thread_select): critical typo in r33117.usa2011-08-301-1/+1
| | | | git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@33132 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* * win32/win32.c, include/ruby/intern.h (rb_w32_fd_copy): implementusa2011-08-301-1/+4
| | | | | | | | | | | | | for rb_thread_select() in thread.c. the use of rb_fd_copy() is introduced in r33117. [Bug #5229] [ruby-core:39102] * thread.c (rb_thread_select): must call rb_fd_init() before using rb_fdset_t. see the implementations of rb_fd_init()s if you want to know the reason. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@33128 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* * thread.c (rb_thread_select): rewrite by usingkosaki2011-08-301-19/+26
| | | | | | | | | | | | | | | rb_thread_fd_select(). old one is EINTR unsafe. Patch by Eric Wong. [Bug #5229] [ruby-core:39102] * test/-ext-/old_thread_select/test_old_thread_select.rb: a testcase for rb_thread_select(). * ext/-test-/old_thread_select/old_thread_select.c: ditto. * ext/-test-/old_thread_select/depend: ditto. * ext/-test-/old_thread_select/extconf.rb: ditto. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@33117 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* * thread.c (update_coverage): skip coverage count up if the currentmame2011-08-231-1/+1
| | | | | | | | | line is out of the way. rb_sourceline() is unreliable when source code is big. [ruby-dev:44413] * test/coverage/test_coverage.rb: add a test for above. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@33030 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* * thread.c: add a description for the behavior of select(2) onmrkn2011-08-191-0/+4
| | | | | | Mac OS X 10.7 (Lion). git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@33005 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* * thread.c (set_trace_func, thread_set_trace_func_m): reset tracingmame2011-07-211-0/+2
| | | | | | | | | | | state when set_trace_func hook is removed. This is workaround patch to force to reset tracing state that is broken by continuation call. a patch from James M. Lawrence. [Feature #4347] [ruby-core:34998] * test/ruby/test_continuation.rb (class TestContinuation): add a test for above. a patch from James M. Lawrence. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@32597 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* * thread_pthread.c (mutex_debug): use exit(EXIT_FAILURE) instad ofkosaki2011-07-101-1/+1
| | | | | | | | | | | exit(1). * thread_pthread.c (add_signal_thread_list): ditto. * thread.c (rb_thread_call_with_gvl): ditto. * util.c (Bug): ditto. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@32494 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* * vm_core.h (typedef struct rb_vm_struct): create a newkosaki2011-07-101-0/+5
| | | | | | | | | | | | | | 'inhibit_thread_createion' field. * thread.c (rb_thread_terminate_all): set inhibit_thread_creation. * thread.c (thread_s_new): don't permit to create new thread if the VM is under destruction. Otherwise evil finalizer code can make SEGV. [Bug #4992][ruby-core:37858] * bootstraptest/test_objectspace.rb: new test for this fix. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@32492 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* * thread.c (cmp_tv, subtract_tv): no longer used on Win32.nobu2011-07-081-2/+2
| | | | git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@32454 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* * thread.c (rb_mutex_unlock_all): folded intokosaki2011-07-081-29/+19
| | | | | | | | | rb_threadptr_unlock_all_locking_mutexes. * thread.c (rb_threadptr_unlock_all_locking_mutexes) ditto. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@32447 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* * thread.c (thread_unlock_all_locking_mutexes): rename tokosaki2011-07-081-3/+3
| | | | | | | | | | | | | rb_threadptr_unlock_all_locking_mutexes and remove static. * vm_core.h: add rb_threadptr_unlock_all_locking_mutexes declaration. * thread.c (thread_start_func_2): adjust the above rename. * eval.c (ruby_cleanup): call rb_threadptr_unlock_all_locking_mutexes again after finalizer. [Bug #4988] [ruby-dev:44049] git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@32446 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* * thread.c (do_select): fix memory leak.kosaki2011-07-011-0/+8
| | | | | | | | Patch by Eric Wong. Thank you! [Bug #4953] [ruby-core:37702] git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@32348 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* * thread.c (rb_threadptr_check_signal): only wake up main thread.ko12011-06-301-12/+8
| | | | | | | | | | | | | | | | | * thread.c (rb_threadptr_execute_interrupts_common): check signal deliverly if it is main thread. fixes [ruby-dev:44005] [Ruby 1.9 - Bug #4950] * bootstraptest/test_fork.rb: add a test for above. * signal.c (rb_get_next_signal): skip if signal_buff is empty. (check signal_buff.size first) * vm_core.h: remove unused variable rb_thread_t::exec_signal. * thread.c (rb_thread_check_trap_pending): check rb_signal_buff_size() because rb_thread_t::exec_signal is no longer available. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@32345 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* * vm_insnhelper.c (vm_call_bmethod): fix to hook call/return eventko12011-06-301-2/+1
| | | | | | | | | | | | | | | for methods defined by define_method(). * thread.c (call_trace_proc): Fix to skip if class is not given (0). Note that ID and Class object are passed for call/return event if the called method was defined by define_method(). If you are author of tracer/profiler/debugger, this may be an important change. You should check passed class as zero or non-zero instead of checking the event type. * test/ruby/test_settracefunc.rb: add a test for above. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@32334 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* * thread.c (ruby_thread_s_pass): Fix typo.drbrain2011-06-291-4/+4
| | | | git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@32306 b2dd03c8-39d4-4d8f-98ff-823fe69b080e