aboutsummaryrefslogtreecommitdiffstats
path: root/thread.c
Commit message (Collapse)AuthorAgeFilesLines
...
* * thread.c: remove BLOCKING_REGION_CORE() macro. It's no longer usedkosaki2011-06-151-7/+0
| | | | | | | | since r32021. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@32102 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* * thread.c (rb_thread_schedule_rec): call gvl_yield() unconditionally.kosaki2011-06-131-12/+2
| | | | | | | | | | * thread_pthread.c: remove HAVE_GVL_YIELD macro. * thread_win32.c (gvl_yield): new. this fallback logic was moved from rb_thread_schedule_rec(). git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@32069 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* * thread_pthread.c: rewrite GVL completely.kosaki2011-06-131-18/+22
| | | | | | | | | | | * thread_win32.c: ditto. * thread_pthread.h: ditto. * vm_core.h: ditto. * thread.c: ditto. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@32064 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* * thread.c: remove th->transition_for_lock. It's thread unsafe.kosaki2011-06-121-15/+9
| | | | | | | | [Bug #4723][ruby-dev:43563] git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@32022 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* * thread.c: introduce spurious wakeup safe deadlock check.kosaki2011-06-121-29/+24
| | | | | | | | [Bug #4696][ruby-dev:43554] git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@32021 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* * vm_core.h (RUBY_VM_SET_TIMER_INTERRUPT, RUBY_VM_SET_INTERRUPT,kosaki2011-06-111-4/+5
| | | | | | | | | | | | | | | RUBY_VM_SET_FINALIZER_INTERRUPT): use atomic ops for preventing interrupt_flag bit lost. * thread.c (rb_threadptr_execute_interrupts_rec): ditto. * vm_core.h (typedef struct rb_thread_struct): change type of interrupt_flag to rb_atomic_t. * atomic.h: move atomic ops definition from signal.c. * signal.c: remove atomic ops definition. * common.mk (gc, signal, thread, cont): add to dependency to atomic.h. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@32014 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* * thread.c (rb_thread_execute_interrupts): use GetThreadPtr to extractakr2011-06-111-2/+4
| | | | | | | | rb_thread_t from VALUE. reorted by Motohiro KOSAKI. [ruby-dev:43700] git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@31989 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* * io.c: fix IO.copy_stream interrupt handling.akr2011-06-091-0/+7
| | | | | | | | | | | | | | | | based on the patch by Eric Wong. [ruby-core:36156] * vm_core.h (rb_thread_call_with_gvl): don't declare here. * thread.c: include internal.h. (rb_thread_execute_interrupts): new function. * internal.h (rb_thread_execute_interrupts): declared. (rb_thread_call_with_gvl): declared. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@31971 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* * gc.c (rb_objspace_call_finalizer): use rb_typeddata_is_kind_of() fornagachika2011-06-091-0/+11
| | | | | | | | | type check to get rid of a double free when main Thread has singleton class. [ruby-core:36741] [Bug #4828] * thread.c (rb_obj_is_mutex): add a new utility function. * vm.c (rb_obj_is_thread): ditto. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@31968 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* * thread.c (ppoll): typo bug fix.nagai2011-05-261-2/+2
| | | | git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@31743 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* * thread.c (Init_Thread): add a code comment why the meaninglesskosaki2011-05-211-0/+1
| | | | | | | | line is necessary. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@31676 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* * eval.c (setup_exception): internal exception should be hiddennobu2011-05-181-2/+2
| | | | git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@31626 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* * thread.c (rb_mutex_lock): remove remove_signal_thread_list() call.kosaki2011-05-171-1/+0
| | | | | | | | | It's meaningless because lock_interrupt doesn't call add_signal_thread_list(). git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@31610 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* * include/ruby/intern.h: resurrect old rb_fd_copy().kosaki2011-05-151-0/+11
| | | | | | | | * thread.c (rb_fd_copy): ditto. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@31581 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* * include/ruby/intern.h: remove rb_fd_copy() to rb_fd_dup() andkosaki2011-05-151-8/+8
| | | | | | | | | | rb_w32_fdcopy() to rb_w32_fd_dup(). * win32/win32.c: ditto. * thread.c: ditto. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@31580 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* * thread.c (rb_fd_zero): remove redundant zero fill.kosaki2011-05-071-3/+1
| | | | git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@31467 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* * thread.c (rb_fd_init): remove volatile qualifier.kosaki2011-05-071-2/+2
| | | | git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@31466 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* * thread.c (rb_fd_init_copy): new internal api. It provide efficientkosaki2011-05-071-12/+25
| | | | | | | | | copy constructor semantics. * thread.c (do_select): use rb_fd_init_copy(). git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@31465 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* r31460 is wrong fix. fix it again.kosaki2011-05-071-2/+3
| | | | git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@31464 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* fix incorrect native_cond_signal call when deadlock was detected.kosaki2011-05-071-2/+2
| | | | | | | | | * thread.c (lock_func): timedwait don't touch cond_waiting and cond_notifid variables. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@31460 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* mutex: deadlock check timeout use monotonic time.kosaki2011-05-061-26/+9
| | | | | | | | | | | | | | | | | * thread_pthread.c (native_cond_timeout): new internal api. it calculate a proper time for argument of native_cond_timedwait(). * thread_win32.c (native_cond_timeout): ditto. * thread_pthread.c (thread_timer): use native_cond_timeout() instead of get_ts. * thread.c (lock_func): ditto. * thread_pthread.c (get_ts): removed. use native_cond_timeout(). * thread.c (init_lock_timeout): ditto. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@31454 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* * thread_pthread.h (rb_thread_cond_t): add clockid field. it'skosaki2011-05-061-1/+1
| | | | | | | | | | | | | no longer an alias of pthread_cond_t. * thread_pthread.c: adapt new rb_thread_cond_t type. * thread.c (mutex_alloc): ditto. * thread_win32.c (native_cond_initialize): ditto. * configure.in: add check for pthread_cond_attr_setclock() and clockid_t type. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@31451 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* * thread.c (rb_wait_for_single_fd): use ppoll() instead of poll()kosaki2011-05-061-9/+51
| | | | | | | | if possible. based on a patch from Eric Wong. [ruby-core:36003]. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@31450 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* * thread.c (rb_wait_for_single_fd): Fix wrong return value.kosaki2011-05-041-9/+25
| | | | | | | | | * test/-ext-/wait_for_single_fd/test_wait_for_single_fd.rb (TestWaitForSingleFD#test_wait_for_closed_pipe): test for it. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@31429 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* * thread.c (rb_wait_for_single_fd): Added POLLNVAL check.kosaki2011-05-041-1/+4
| | | | | | | | based on a patch from Eric Wong at [ruby-core:35991]. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@31426 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* * thread.c (rb_wait_for_single_fd): new. poll(2) based backend for ↵kosaki2011-05-041-0/+58
| | | | | | | | | | | | rb_wait_for_single_fd(). Now only Linux uses it. The patch was written by Eric Wong. [Ruby 1.9 - Feature #4531] git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@31420 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* * thread.c (rb_wait_for_single_fd): new.kosaki2011-05-041-12/+77
| | | | | | | | | | | | | | | | | | | | * thread.c (select_single): select(2) based backend for rb_wait_for_single_fd(). * io.c (make_writeconv): use rb_wait_for_single_fd() instaed of rb_thread_fd_select(). * io.c (rb_io_wait_readable): ditto. * thread.c (rb_thread_wait_fd_rw): ditto. * io.c (wait_readable): removed. * thread.c (init_set_fd): new helper function. * include/ruby/io.h (RB_WAITFD_IN, RB_WAITFD_PRI, RB_WAITFD_OUT): new constant for rb_single_wait_fd(). The patch was written by Eric Wong. [Ruby 1.9 - Feature #4531] git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@31419 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* * thread.c (rb_fd_copy): fix wrong argument.This issue was pointedkosaki2011-05-031-1/+1
| | | | | | | | out by Eric Wong. [ruby-core:35982] git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@31416 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* * thread.c (rb_thread_select): preserve errno if no errornobu2011-05-021-1/+1
| | | | | | occurred. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@31412 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* * thread.c (rb_thread_select): release GVL while waiting select().kosaki2011-04-301-1/+11
| | | | git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@31400 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* * thread.c (do_select): Change arugment type to rb_fdset_t.kosaki2011-04-301-27/+37
| | | | | | | | | | | | | | Now do_select() is free from unexpected hangup if HAVE_RB_FD_INIT=1 [Bug #4636] * thread.c (rb_thread_fd_select, rb_thread_wait_fd_rw): adapt new argument type. * thread.c (rb_thread_select): make dummy implementation. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@31396 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* * thread.c (rb_fd_copy): Change function argument. Nowkosaki2011-04-301-4/+5
| | | | | | | | | rb_fd_copy() has fully copy semantics. * include/ruby/intern.h: ditto. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@31395 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* * thread.c (do_select): remove useless ifdef. time calculationkosaki2011-04-301-5/+2
| | | | | | | | is not heavy weight. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@31393 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* fix indentationkosaki2011-04-291-13/+13
| | | | git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@31381 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* * thread.c (lock_func): small cleanup.kosaki2011-04-291-1/+6
| | | | git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@31375 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* * thread.c (rb_mutex_lock, lock_func): Avoid busy loop andkosaki2011-04-291-17/+43
| | | | | | | | | | | performance degression. bm_vm3_thread_mutex.rb performance change from 109.064sec to 16.331sec. * thread.c (init_lock_timeout): New helper function. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@31373 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* * thread.c (thread_fd_close_i): IOError exception should be assignednagachika2011-04-131-1/+1
| | | | | | to rb_thread_t::thrown_errinfo. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@31270 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* * thread.c (exec_recursive): prevent temporary objects from GC.nobu2011-02-201-5/+6
| | | | git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@30924 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* * thread.c (rb_thread_io_blocking_region): reset th->waiting_fdnagachika2011-02-141-0/+1
| | | | | | | after blocking region, because remaining waiting_fd might cause unnecessary IOError. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@30873 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* * thread.c (rb_thread_io_blocking_region): new function to runnobu2011-02-121-1/+51
| | | | | | | blocking region with GIL released, for fd. * thread.c (rb_thread_fd_close): implement. [ruby-core:35203] git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@30852 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* * thread.c (thread_start_func_2): check deadlock condition beforenagachika2011-01-311-2/+3
| | | | | | | release thread stack. fix memory violation when deadlock detected. reported by Max Aller. [Bug #4009] [ruby-core:32982] git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@30743 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* * thread.c: parenthesize macro arguments.akr2011-01-081-9/+9
| | | | git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@30490 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* * thread.c (rb_thread_atfork): Add small comment why we needkosaki2010-12-251-0/+2
| | | | | | | | reset random seed. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@30358 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* * thread.c (thread_cleanup_func): Moved interrupted_lockkosaki2010-12-201-0/+1
| | | | | | | | | | | | destroying code from native_thread_destroy() to thread_cleanup_func() because it's platform independent logic. * thread_win32.c (native_thread_destroy): ditto. * thread_pthread.c (native_thread_destroy): ditto. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@30274 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* * thread.c (thread_cleanup_func): Don't touch native threadingkosaki2010-12-201-3/+12
| | | | | | | | | resource at fork. Sadly this is purely bandaid. We need to implement proper fix later. [Bug #4169] [ruby-core:33767] git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@30272 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* * thread.c, vm_core.h: make gvl_acquire/release/init/destructko12010-11-271-14/+21
| | | | | | | | | | | | | | | | | | | | APIs to modularize GVL implementation. * thread_pthread.c, thread_pthread.h: Two GVL implementations. (1) Simple locking GVL which is same as existing GVL. (2) Wake-up queued threads. The wake-up order is simple FIFO. (We can make several queues to support exact priorities, however this causes some issues such as priority inversion and so on.) This impl. prevents spin-loop (*1) caused on SMP environemnts. *1: Only one Ruby thread acqures GVL again and again. Bug #2359 [ruby-core:26694] * thread_win32.c, thread_win32.h: Using simple lock not by CRITICAL_SECTION but by Mutex. Bug #3890 [ruby-dev:42315] * vm.c (ruby_vm_destruct): ditto. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@29956 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* * configure.in (RUBY_CHECK_PRINTF_PREFIX): check for printf formatnobu2010-10-121-1/+1
| | | | | | specifier if possible. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@29468 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* * compile.c (iseq_build_body), error.c (set_syserr, get_syserr),nobu2010-10-121-2/+2
| | | | | | | | | | | | | | (syserr_initialize), gc.c (define_final, rb_gc_copy_finalizer), (run_final), hash.c (rb_hash_aref, rb_hash_lookup2), (rb_hash_fetch_m, rb_hash_clear, rb_hash_aset, eql_i), iseq.c (iseq_load, iseq_data_to_ary), marshal.c (r_symlink), thread.c (rb_thread_local_aref), variable.c (generic_ivar_remove, ivar_get, rb_const_get_0), (rb_cvar_get), vm.c (rb_vm_check_redefinition_opt_method), vm_insnhelper.c (vm_get_ev_const), vm_method.c (remove_method), ext/iconv/iconv.c (map_charset): use st_data_t. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@29462 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* * vm_core.h (rb_signal_buff_size, rb_signal_exec): movednobu2010-10-091-5/+0
| | | | | | declarations from thread.c. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@29432 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* * thread.c (thread_reset_event_flags, exec_event_hooks): ignorenobu2010-10-091-17/+102
| | | | | | | | | | | hooks marked as removed. * thread.c (thread_exec_event_hooks): remove hooks to be removed. * thread.c (rb_threadptr_remove_event_hook, rb_remove_event_hook): defer removing hooks if running the hooks. [ruby-dev:42350] git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@29429 b2dd03c8-39d4-4d8f-98ff-823fe69b080e