Граф коммитов

399 Коммитов

Автор SHA1 Сообщение Дата
kosaki f081eca1d7 * thread.c (rb_fd_copy): fix wrong argument.This issue was pointed
out by Eric Wong. [ruby-core:35982]



git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@31416 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2011-05-03 22:37:07 +00:00
nobu 55a1b1d97a * thread.c (rb_thread_select): preserve errno if no error
occurred.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@31412 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2011-05-02 19:27:59 +00:00
kosaki 4d88169267 * thread.c (rb_thread_select): release GVL while waiting select().
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@31400 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2011-04-30 16:08:20 +00:00
kosaki 3c68095b8a * thread.c (do_select): Change arugment type to rb_fdset_t.
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
2011-04-30 11:23:08 +00:00
kosaki 225fa965bc * thread.c (rb_fd_copy): Change function argument. Now
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
2011-04-30 11:18:14 +00:00
kosaki 4c926e9f15 * thread.c (do_select): remove useless ifdef. time calculation
is not heavy weight.



git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@31393 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2011-04-30 11:08:39 +00:00
kosaki 9d4ae4ab0c fix indentation
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@31381 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2011-04-29 03:23:13 +00:00
kosaki 6998f013ab * thread.c (lock_func): small cleanup.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@31375 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2011-04-29 01:18:11 +00:00
kosaki 74c5e807f7 * thread.c (rb_mutex_lock, lock_func): Avoid busy loop and
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
2011-04-29 01:11:28 +00:00
nagachika d4d13162c5 * thread.c (thread_fd_close_i): IOError exception should be assigned
to rb_thread_t::thrown_errinfo.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@31270 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2011-04-13 15:43:13 +00:00
nobu c4cc4d31e6 * thread.c (exec_recursive): prevent temporary objects from GC.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@30924 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2011-02-20 07:26:48 +00:00
nagachika d7feebb4b3 * thread.c (rb_thread_io_blocking_region): reset th->waiting_fd
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
2011-02-14 14:13:46 +00:00
nobu 58b325366d * thread.c (rb_thread_io_blocking_region): new function to run
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
2011-02-12 05:44:23 +00:00
nagachika a2ba50d971 * thread.c (thread_start_func_2): check deadlock condition before
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
2011-01-31 12:40:19 +00:00
akr c36ad781ef * thread.c: parenthesize macro arguments.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@30490 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2011-01-08 10:29:15 +00:00
kosaki e271684d2f * thread.c (rb_thread_atfork): Add small comment why we need
reset random seed.



git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@30358 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2010-12-25 08:50:53 +00:00
kosaki 1ff6a1953c * thread.c (thread_cleanup_func): Moved interrupted_lock
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
2010-12-20 15:20:17 +00:00
kosaki 97da02b2a6 * thread.c (thread_cleanup_func): Don't touch native threading
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
2010-12-20 15:16:41 +00:00
ko1 450463d5fb * thread.c, vm_core.h: make gvl_acquire/release/init/destruct
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
2010-11-27 20:15:59 +00:00
nobu cea3919ae6 * configure.in (RUBY_CHECK_PRINTF_PREFIX): check for printf format
specifier if possible.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@29468 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2010-10-12 15:03:51 +00:00
nobu d410639a6d * compile.c (iseq_build_body), error.c (set_syserr, get_syserr),
(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
2010-10-12 14:47:23 +00:00
nobu ff6ce776cb * vm_core.h (rb_signal_buff_size, rb_signal_exec): moved
declarations from thread.c.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@29432 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2010-10-09 20:33:21 +00:00
nobu 549b0c53a8 * thread.c (thread_reset_event_flags, exec_event_hooks): ignore
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
2010-10-09 02:00:21 +00:00
nobu c3032fa749 * thread.c (rb_threadptr_exec_event_hooks): suppress each event
hooks separately.

* thread.c (thread_suppress_tracing): split from
  ruby_suppress_tracing, accepting thread pointer and event mask.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@29428 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2010-10-09 01:51:19 +00:00
nobu 88533a5351 * thread.c (rb_threadptr_remove_event_hook): fix typo.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@29427 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2010-10-08 23:16:20 +00:00
naruse e1d5d4e7f2 * enc/unicode.c (onigenc_unicode_property_name_to_ctype):
remove useless assignment.

* vm.c (vm_make_proc_from_block): ditto.

* variable.c (rb_ivar_count): ditto.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@29405 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2010-10-03 22:57:23 +00:00
nobu 8086b525ac * thread.c (ruby_suppress_tracing): restore the state and invoke
the func with normal state.  a patch from Satoshi Shiba <shiba
  AT rvm.jp> at [ruby-dev:42162].  [ruby-core:31783]

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@29155 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2010-09-01 03:56:39 +00:00
nobu f214490d90 * thread.c (rb_gc_mark_threads): deprecated.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@28989 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2010-08-14 12:04:31 +00:00
nobu 25b9eb5e57 * include/ruby/ruby.h (rb_data_type_t): restructured. [ruby-dev:41862]
add parent member.

* error.c (rb_typeddata_inherited_p): new function.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@28676 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2010-07-18 07:31:54 +00:00
nobu c04d79f867 * thread.c (rb_thread_wakeup_alive): split from rb_thread_wakeup.
merged from r13476.  c.f. [ruby-core:31320]

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@28660 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2010-07-17 04:04:51 +00:00
mame d9d650ecfd * thread.c (rb_fd_resize, rb_fd_copy): avoid NULL dereference upon
failed realloc by using xrealloc instead of not realloc.  a patch
  from Jim Meyering <meyering at redhat.com> in [ruby-core:30920]
  [Bug #3489]

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@28457 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2010-06-28 12:58:03 +00:00
nobu f5534ad5b4 * thread.c (Init_Thread): no need to suppress warning for
ruby_thread_set_native anymore.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@28196 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2010-06-07 18:30:35 +00:00
akr f40d2c9670 * vm.c (Init_BareVM): call Init_native_thread here.
* thread.c (Init_Thread): don't call Init_native_thread.

* thread_pthread.c (Init_native_thread): exported.

* thread_win32.c (Init_native_thread): ditto.

[ruby-dev:41536]



git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@28183 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2010-06-05 23:26:43 +00:00
nobu 45f6fbf339 * removed trailing spaces.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@28085 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2010-05-29 18:51:39 +00:00
tarui 12a99794b4 * thread.c (RB_GC_SAVE_MACHINE_CONTEXT), gc.c (ruby_gc_stress_start):
revert r28078.


git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@28081 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2010-05-29 17:26:01 +00:00
tarui d0914b3552 * thread.c (RB_GC_SAVE_MACHINE_CONTEXT): start GC
by switching the thread if gc_stress == true 

* gc.c (ruby_gc_stress_start): dotto.


git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@28078 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2010-05-29 16:32:59 +00:00
kosaki 827a17bdbb * thread.c (blocking_region_begin): avoid RUBY_VM_CHECK_INTS()
call during GVL state transition. [Bug#3354] [ruby-dev:41435]



git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@28055 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2010-05-28 12:28:32 +00:00
usa f82a6840a8 * thread.c (subtract_tv): if the rest is zero, should finish waiting
immediately.

* win32/win32.c (subtract): ditto.
  based on a patch from Roger Pack in [ruby-core:27957].


git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@27930 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2010-05-20 16:13:35 +00:00
marcandre 7729de4d91 * array.c: Documentation: change => in call-seq to ->.
Harmonize "#=>" in examples. [ruby-core:30206]

* bignum.c: ditto

* class.c: ditto

* compar.c: ditto

* cont.c: ditto

* dir.c: ditto

* encoding.c: ditto

* enum.c: ditto

* enumerator.c: ditto

* error.c: ditto

* eval.c: ditto

* file.c: ditto

* gc.c: ditto

* io.c: ditto

* load.c: ditto

* marshal.c: ditto

* math.c: ditto

* numeric.c: ditto

* object.c: ditto

* pack.c: ditto

* proc.c: ditto

* process.c: ditto

* random.c: ditto

* range.c: ditto

* re.c: ditto

* ruby.c: ditto

* signal.c: ditto

* sprintf.c: ditto

* string.c: ditto

* struct.c: ditto

* thread.c: ditto

* time.c: ditto

* transcode.c: ditto

* variable.c: ditto

* vm_eval.c: ditto

* vm_method.c: ditto

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@27865 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2010-05-17 21:07:33 +00:00
mame 50587316b8 * vm_core.c (rb_thread_struct): add a field for sigaltstack.
* thread_pthread.c (thread_start_func_1): initialize machine stack
  information.

* thread.c (thread_start_func_2): set sigaltstack for each sub thread.
  [ruby-core:24540] [ruby-core:30207]

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@27789 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2010-05-13 16:20:26 +00:00
nobu 6aa05eba8a * thread.c (rb_thread_aset): fixed argument type.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@27678 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2010-05-08 15:27:48 +00:00
marcandre 1dee5e34a3 * error.c: RDoc for subclasses of Exception. [ruby-core:28394]
* cont.c: ditto

* enumerator.c: ditto

* io.c: ditto

* math.c: ditto

* numeric.c: ditto

* proc.c: ditto

* re.c: ditto

* thread.c: ditto

* transcode.c: ditto. Thanks to Run Paint for some of the documentation.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@27671 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2010-05-08 04:50:09 +00:00
mame 97cfd1869c * thread. (rb_thread_terminate_all): revert r24591 which caused SEGV
sometimes.  [ruby-dev:40936] [ruby-core:27245] [ruby-core:27416]

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@27534 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2010-04-28 13:56:32 +00:00
nobu 92e2b86c3d * thread.c (timer_thread_function): unused variable.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@27522 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2010-04-28 00:47:19 +00:00
mame 4af243a8af * eval.c (ruby_cleanup): before cleanup, check signal buffer and run
handler if any.  [ruby-core:20970]

* thread.c (rb_threadptr_check_signal): separeted from
  timer_thread_function.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@27513 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2010-04-27 12:27:13 +00:00
mame 59b91237c3 * thread.c (rb_thread_blocking_region, rb_thread_blocking_region_end):
preserve errno.  [Bug #2606] [ruby-core:28924]

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@27401 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2010-04-19 15:34:04 +00:00
mame 42b8a699ed * thread.c (rb_thread_priority, rb_thread_priority_set): fix rdoc.
Lower-priority thread may run even if there are higher-priority
  threads.  See [ruby-dev:40977].

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@27351 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2010-04-15 13:44:52 +00:00
kosaki 75ce78429e * vm_core.h: Introduce UNINITIALIZED_VAR() macro.
* thread.c (do_select): Use UNINITIALIZED_VAR() instead FAKE_FD_ZERO().
	  Also, remove FAKE_FD_ZERO completely. [Feature #3018]




git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@27238 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2010-04-06 14:07:06 +00:00
wanabe 0a6418d85e * thread.c (thread_reset_event_flags): set flags to thread.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@27046 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2010-03-25 14:56:38 +00:00
mame 96ecfe9a57 * thread.c (thread_create_core): let new thread inherit RUBY_EVENT_VM
of event_flags.  [ruby-core:25191]

* thread.c (rb_threadptr_exec_event_hooks): delete RUBY_EVENT_VM if
  all event_hooks are removed.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@27033 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2010-03-24 14:47:00 +00:00
usa 6ebdbb30ad * thread.c (do_select): wrong conditions. [ruby-core:27753]
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@26409 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2010-01-25 14:09:46 +00:00
nobu a1d4164257 * thread.c (thread_start_func_2): unlock all locking mutexes
before clean up.  [ruby-core:26877]

* thread.c (rb_thread_atfork): no other threads to be joined.

* vm_core.h (rb_thread_lock_unlock, rb_thread_lock_destroy):
  new functions.

* vm.c (ruby_vm_destruct): unlock and destroy global VM lock.


git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@26390 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2010-01-23 20:18:36 +00:00
yugui 295bc2fe25 removes the dtrace support. reverts r26239, r26238 and r26235.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@26243 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2010-01-05 05:59:23 +00:00
yugui b80814c339 * gc.c: added UNLIKELY to probes for optimization.
* vm.c: ditto.

* thread.c: ditto.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@26239 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2010-01-04 12:36:46 +00:00
yugui 72b199940d * trace.h: new file. wraps tracing mechanisms.
* defs/dtrace.d: new file. defined a dtrace provider "ruby".

* include/ruby/ruby.h (LIKELY): moved from vm.c.
  (UNLIKELY): ditto.
  (OBJSETUP): probe "object-create".
  (RUBY_EVENT_RESCUE): new event.

* vm_exec.c (DEBUG_ENTER_INSN): embeded a probe insn-entry into it.
  (DEBUG_END_INSN): insn-return.

* vm.c (LIKELY): moved into ruby.h.
  (UNLIKELY): ditto.
  (Init_BareVM): embeded a probe "raise" into it.

* variable.c (rb_class2name_without_alloc): new utility function.

* tool/rbinstall.rb (install?(:ext, :arch, :'ext-arch')): installs 
  dtrace.d if necessary.

* thread_pthread.c (add_signal_thread_list): probe "raise".
  (rb_thread_create_timer_thread): ditto.

* thread.c (rb_thread_schedule_rec): probes "thread-enter" and
  "thread-leave",
  (thread_start_func_2): ditto.
  (thread_cleanup_func): probe "thread-term"

* lib/mkmf.rb: supports dtrace postprocessor on making an extension.

* iseq.c (rb_vm_insn_name): new utility function.
  (rb_vm_insn_len): ditto.

* insns.def (hook): probes "method-etnry", "method-return", "line",
  and "rescue".

* compile.c (iseq_compile_each): adds a trace op for "rescue" probe.

* gc.c (garbage_collect): probes "gc-begin" and "gc-end".
  (obj_free): probe "object-free"
  (garbage_collect_with_gvl): probe "raise"
  (negative_size_allocation_error): ditto.
  (rb_memerror): ditto.

* eval.c (rb_rescue2): probe "rescue"
  (rb_longjmp): probe "raise"

* ext/probe/probe.c: new extension for application defined probes.

* ext/probe/extconf.rb: ditto.

* configure.in (--with-tracing-model): new option to choose a tracing
  mechanism.
  (DTRACE): new substitution. name of dtrace(1).
  (RUBY_TRACING_MODEL): new substitution.
  (DTRACE_OBJ): ditto.
  (MINIDTRACE_OBJ): ditto.
  (GOLFDTRACE_OBJ): ditto.
  (LIBRUBY_DTRACE_OBJ): ditto.
  (RUBY_DTRACE_POSTPROCESS): new macro. checks whether the dtrace on 
  the system needs postprocessing.
  (RUBY_DTRACE_BSD_BROKEN): new macro. checks whether the dtrace
  supports USDT.

* Makefile.in: 
  (DTRACE): new variable. name of dtrace(1).
  (TRACING_MODEL): new variable. name of the chosen tracing mechanism.
  (DTRACE_OBJ): same as the one in configure.in.
  (MINIDTRACE_OBJ): ditto.
  (GOLFDTRACE_OBJ): ditto.
  (LIBRUBY_DTRACE_OBJ): ditto.
  (CPPOUTFILE): new substitution. necessary for generating dtrace.d
  (trace_none.h): new target for TRACING_MODEL=none
  (RUBY_H_INCLUDES): appended a header for tracing.
  (distclean-local): also removes preprocessed version of dtrace.d
  ($(LIBRUBY_A)): needs $(LIBRUBY_DTRACE_OBJ) if dtrace needs 
  postprocessing.
  ($(PROGRAM)): ditto.
  (golf): ditto.
  (miniruby): ditto.
  ($(arch_hdrdir)/ruby/dtrace.d): new target. preprocessed verson 
  of defs/dtrace.d. generated if necessary.
  ($(arch_hdrdir)/ruby/trace_dtrace.h): new target.
  definition of probes.
  ($(LIBRUBY_DTRACE_OBJ)): new target. generated if dtrace needs 
  postprocessing.
  ($(DTRACE_OBJ)): ditto.
  ($(MINIDTRACE_OBJ)): ditto.
  ($(GOLFDTRACE_OBJ)): ditto.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@26235 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2010-01-03 15:36:17 +00:00
naruse f62310ac62 doc fix: mutex.lock => self [ruby-core:27115]
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@26072 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2009-12-13 14:08:37 +00:00
nobu 748fe216c2 * thread.c (rb_thread_atfork_internal): reinitialize global lock
at fork to get rid of deadlock.  based on the patch from Hongli
  Lai in [ruby-core:26783].  [ruby-core:26361]


git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@25842 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2009-11-18 09:25:11 +00:00
nobu e8c17f1a59 * thread.c (terminate_atfork_i): all mutex locks by other threads
have been abandoned at fork.


git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@25841 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2009-11-18 08:48:24 +00:00
mame 31c0e3385f * thread.c (thread_cleanup_func): delete locking_mutex when thread
object become dummy because of fork.  [ruby-core:26744]
  [ruby-core:26745]

* bootstraptest/test_thread.rb: add a test for above.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@25771 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2009-11-15 15:10:49 +00:00
nobu 9ba317f157 * thread.c (thread_start_func_2): see first_func, not first_proc,
to decide which to use.


git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@25748 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2009-11-13 07:22:04 +00:00
nobu 1d4183030d * thread.c (thread_create_core): moved failure handling from
native_thread_core().


git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@25726 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2009-11-12 04:57:39 +00:00
akr 6ebdf24500 * thread.c (blocking_region_begin): define before BLOCKING_REGION.
reported by Luis Lavena.  [ruby-core:26670]


git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@25713 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2009-11-10 23:34:03 +00:00
akr d6f5da84e3 * thread.c (rb_gc_save_machine_context): don't save the stack pointer
in this function.
  (RB_GC_SAVE_MACHINE_CONTEXT): call rb_gc_save_machine_context and
  save the stack pointer at caller side.
  (rb_thread_schedule_rec): use RB_GC_SAVE_MACHINE_CONTEXT instead of
  rb_gc_save_machine_context.
  (blocking_region_begin): changed to a macro.  use
  RB_GC_SAVE_MACHINE_CONTEXT instead of rb_gc_save_machine_context.
  [ruby-dev:39659]


git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@25701 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2009-11-09 11:18:17 +00:00
akr b9e0294eda fix typos.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@25635 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2009-11-03 17:46:28 +00:00
usa 9ee5e613b5 * thread_{pthread,win32}.c (native_stop_timer_thread): join the thread
here.

* thread_{pthread,win32}.c (native_reset_timer_thread): new function.

* thread.c (rb_thread_stop_timer_thread, rb_thread_reset_timer_thread):
  call above function instead of simply seting 0.



git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@25627 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2009-11-02 03:58:25 +00:00
nobu 6116f52f61 * thread.c (rb_thread_blocking_region): reverted r25566, and added
description that no exception is allowed inside `func', instead.
  see [ruby-dev:39582]


git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@25570 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2009-10-30 04:36:40 +00:00
usa de6d21a381 * thread.c (rb_thread_blocking_region): standard C doesn't accept
preprosessing directive within macro expansion.



git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@25567 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2009-10-30 04:01:46 +00:00
nobu 411b747091 * thread.c (rb_thread_blocking_region): must ensure to unlock GVL.
[ruby-dev:39579]


git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@25566 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2009-10-30 01:55:38 +00:00
marcandre a77a9bb20c * thread.c: Revert changes to Thread#raise made in r25278 [ruby-core:25367]
* eval_intern.h: ditto

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@25316 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2009-10-12 23:53:48 +00:00
marcandre 4aa531ead4 * thread.c: Doc fix for Thread#raise
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@25306 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2009-10-11 22:08:51 +00:00
nobu 478d3535ef * eval.c (rb_threadptr_errinfo): renamed.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@25283 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2009-10-10 08:57:02 +00:00
marcandre 8571bdbd67 * thread.c (rb_threadptr_execute_interrupts_rec, rb_threadptr_raise): Thread#raise with no argument will now re-raise the current exception if there is one [ruby-core:25367]
* eval.c (get_errinfo, rb_rubylevel_thread_errinfo): Getter for current exception for a given thread

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@25278 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2009-10-10 05:13:08 +00:00
nobu 56e358d5f9 * thread.c (ruby_suppress_tracing): get rid of clobbering by
longjmp.


git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@25180 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2009-10-02 06:34:18 +00:00
nobu fe1ce93f52 * compile.c, cont.c, gc.c, insns.def, iseq.c, iseq.h, process.c,
thread.c, vm.c, vm_core.h, vm_dump.c, vm_eval.c,
  vm_insnhelper.c, vm_method.c, template/insns_info.inc.tmpl,
  tool/instruction.rb: fixed types.


git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@25030 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2009-09-21 20:58:26 +00:00
nobu 76fa0d6615 * thread.c: added rdocs.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@24978 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2009-09-17 04:51:33 +00:00
nobu a289f7a4b1 * thread.c (rb_thread_s_debug_set): set level, not only boolean.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@24977 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2009-09-17 04:50:52 +00:00
marcandre 1796522f10 * thread.c (rb_exec_recursive_outer, rb_exec_recursive): Added method to short-circuit to the outermost level in case of recursion
* test/ruby/test_thread.rb (test_recursive_outer): Test for above

* hash.c (rb_hash_hash): Return a sensible hash for in case of recursion [ruby-core:24648]

* range.c (rb_range_hash): ditto

* struct.c (rb_struct_hash): ditto

* array.c (rb_array_hash): ditto

* test/ruby/test_array.rb (test_hash2): test for above

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@24943 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2009-09-15 21:30:50 +00:00
nobu 60f545e2ac * thread.c (thread_list_access): prototyped.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@24892 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2009-09-13 05:09:15 +00:00
marcandre 8b0cb325f5 * thread.c (recursive_*): refactored the access to the inspect table used by
rb_exec_recursive_*. The functions recursive_push, pop and check now assume
  a valid hash table as their first argument. Added documentation.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@24891 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2009-09-13 04:45:54 +00:00
nobu 1a7221035a * thread.c (thgroup_data_type, mutex_data_type, barrier_data_type):
typed.


git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@24808 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2009-09-09 03:21:14 +00:00
nobu 31b7ae00c0 * include/ruby/st.h (st_hash_func): use st_index_t.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@24792 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2009-09-08 13:10:04 +00:00
naruse 18b17dcd19 Revert wrong commit r24715 "* thread.c (do_select): suppress warnings."
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@24717 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2009-08-30 08:06:24 +00:00
naruse 2a12798d58 * thread.c (do_select): suppress warnings.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@24715 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2009-08-30 08:00:14 +00:00
usa 12a4e27f17 * thread.c (do_select): rollback r24680. void struct initializer is
invalid.



git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@24692 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2009-08-28 04:35:29 +00:00
nobu fec3877e8d * thread.c (do_select): suppress warnings.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@24680 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2009-08-26 23:18:49 +00:00
akr 832fd6825c * thread.c (rb_thread_schedule): don't recur infinitely.
(rb_threadptr_execute_interrupts): ditto.
  [ruby-dev:38060]


git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@24628 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2009-08-22 16:19:18 +00:00
mame f72b854c7d * thread.c (rb_check_deadlock): decrease number of sleepers before
deadlock detection because the deadlock exception makes main thread
  run.  [ruby-dev:39142]

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@24616 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2009-08-21 15:14:29 +00:00
matz ec5e3c551d * thread.c (rb_thread_terminate_all): do not ignore interrupt when
reaping threads on termination.  [ruby-dev:39107]

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@24591 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2009-08-20 00:42:16 +00:00
matz d6b9cc7baa * thread.c (recursive_push): need to set UNTRUST. [ruby-dev:38997]
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@24381 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2009-08-03 20:45:52 +00:00
matz 0f1c1ecbd8 * thread.c (recursive_push): untrust internal hash to prevent
unexpected SecurityError.  a patch from Kazuhiro NISHIYAMA.
  Fix: #1864  [ruby-dev:38982]

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@24371 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2009-08-03 09:15:09 +00:00
nobu b35d1e714c * thread.c (rb_threadptr_exec_event_hooks): new function to
execute event hooks, with preserving errinfo.  [ruby-core:24118]


git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@23959 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2009-07-05 05:04:41 +00:00
matz 945ea61cd7 * thread.c (ruby_thread_stack_overflow): call rb_exc_raise() on
stack overflows in the signal handler, if sigaltstack is
  available.  On stack overflow (and with sigaltstack), the signal
  handler is more likely to have room to create an exception
  object.  [ruby-core:23813]

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@23720 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2009-06-17 03:56:29 +00:00
ko1 63bd8a74e8 * thread.c, vm_eval.c: add Thread.backtrace.
* test/ruby/test_thread.rb: add a test.



git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@23691 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2009-06-14 05:59:23 +00:00
ko1 79b62da9b4 * thread.c: rename functions which require a parameter
"rb_thread_t *", the prefix to be rb_threadptr_ instead of
  rb_thread_.
* thread.c (rb_thread_add_event_hook(), rb_thread_remove_event_hook):
  change the parameter type from rb_thread_t * to VALUE.
* eval.c, eval_error.c, eval_intern.h, signal.c, vm_core.h, vm_eval.c:
  ditto.
* include/ruby/intern.h: remove decl of rb_thread_signal_raise() and
  rb_thread_signal_exit().



git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@23651 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2009-06-08 16:14:06 +00:00
nobu 02fb261ec1 * thread.c (rb_exec_recursive_paired): new function for proper
handling of recursive arrays.  [EXPERIMENTAL] [ruby-core:23402]

* array.c (rb_ary_equal, rb_ary_eql, rb_ary_cmp): use above.

* hash.c (hash_equal): ditto.


git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@23557 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2009-05-24 13:48:23 +00:00
nobu 46be98a8cf * thread.c: fixed types.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@23373 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2009-05-09 03:25:16 +00:00
matz d98da36b8c * thread.c (rb_thread_fd_select): new function to call select
using rb_fdset_t.

* io.c (select_internal): use rb_thread_fd_select instead of
  rb_thread_select.  based on the patch from Kengo Matsuyama.
  [ruby-dev:38221]

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@23109 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2009-04-01 04:56:51 +00:00
nobu d1abc53721 * array.c, bignum.c, dln.c, error.c, gc.c, io.c, marshal.c,
numeric.c, pack.c, strftime.c, string.c, thread.c, transcode.c,
  transcode_data.h, util.c, variable.c, vm_dump.c,
  include/ruby/encoding.h, missing/crypt.c, missing/vsnprintf.c:
  suppress VC type warnings.  [ruby-core:22726]


git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@22914 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2009-03-12 09:16:15 +00:00
akr cfe9dcb886 * eval_error.c (error_print): use volatile to suppress warnings.
* vm_eval.c (eval_string_with_cref): ditto.

* thread.c (rb_exec_recursive): ditto.

* eval_jump.c (rb_exec_end_proc): ditto.

* eval.c (ruby_exec_node): ditto.
  (rb_longjmp): ditto.



git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@22677 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2009-02-28 11:12:36 +00:00
mame c55dd9b7d8 * thread.c (thread_cleanup_func): unlock all locked mutexes even when
forking.  [ruby-core:22269]


git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@22577 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2009-02-23 16:20:06 +00:00
nobu 28ec52c087 * thread.c (thread_start_func_2): do not delete main thread from
living_threads.  [ruby-core:19385], [ruby-core:22158]


git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@22389 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2009-02-18 01:29:13 +00:00
nobu 04e2a72f1e * thread.c: inline should be at beginning of declaration.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@22251 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2009-02-12 07:21:42 +00:00
nobu 845103b751 * cont.c (rb_fiber_current), dln.c (dln_print_undef, dln_undefined),
eval.c (rb_iterator_p, rb_need_block), load.c: (Init_load), ruby.c
  (uscore_get, rb_f_chop), st.c (stat_col), signal.c
  (rb_signal_buff_size, ruby_sig_finalize), thread.c
  (rb_thread_sleep_forever, rb_thread_sleep_deadly, rb_thread_alone):
  protoized.


git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@21929 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2009-02-01 12:51:44 +00:00
nobu 3899c1bed7 * thread.c (rb_time_timeval): made a real prototype. a patch from
Marcus Rueckert <darix AT opensu.se> at [ruby-core:21492].


git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@21725 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2009-01-22 02:31:54 +00:00
nobu 4c4aef3bbe * thread.c (rb_thread_execute_interrupts): needs
rb_signal_buff_size to be declared.


git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@21662 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2009-01-19 05:32:05 +00:00
ko1 cf23d0f0f0 * vm.c: add a prefix "rb_" to exposed functions
vm_get_ruby_level_next_cfp(), rb_vm_make_env_object(),
  vm_stack_to_heap(), vm_make_proc(), vm_invoke_proc(),
  vm_get_sourceline(), vm_cref(), vm_localjump_error(),
  vm_make_jump_tag_but_local_jump(), vm_jump_tag_but_local_jump().
  This changes may affect only core because most of renamed functions
  require a pointer of not-exposed struct such as rb_thread_t or NODE.
  In short, they are core functions.
* cont.c, eval.c, eval_intern.h, load.c, proc.c, thread.c,
  vm_core.h, vm_dump.c, vm_eval.c, vm_exec.c, vm_insnhelper.c:
  ditto.



git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@21659 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2009-01-19 02:38:11 +00:00
ko1 a04df27e72 * thread.c (thread_start_func_2): call ruby_cleanup() if thread is
main thread.  [ruby-dev:37624]



git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@21592 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2009-01-16 03:42:50 +00:00
mame 3e7c34140c * thread.c (rb_thread_execute_interrupts): if signal is already
buffered, main thread should wait until timer thread delivers it.

* thread.c (timer_thread_function): should defer delivery of a signal
  if main thread does not yet trap a previous one.  [ruby-dev:37676]


git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@21582 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2009-01-15 17:27:31 +00:00
ko1 d9395fc466 * thread.c (call_trace_proc): as Matz said ([ruby-core:21183]),
should skip rb_str_new2() if rb_sourcefile() returns NULL.
  rb_sourcefile() returns NULL if frame is toplevel of Fiber.
  [ruby-core:21161] [Bug #985]



git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@21578 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2009-01-15 16:45:41 +00:00
usa 50258b19fd * include/ruby/intern.h, thread.c, win32/Makefile.sub (rb_fdset_t,
rb_fd_init, rb_fd_term, rb_fd_zero, rb_fd_set, rb_fd_clr, rb_fd_isset,
	  rb_fd_select, rb_fd_ptr, rb_fd_max, HAVE_RB_FD_INIT): new type,
	  functions, and macros for Windows.

	* win32/win32.c (extract_fd, rb_w32_select): use rb_fdset_t to expand
	  fd_array if needed.  [ruby-core:19946]

	* win32/win32.c (copy_fd): new funcion for rb_w32_select().



git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@21487 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2009-01-13 07:52:22 +00:00
ko1 6f09fc2efd * thread.c: fix comment (terminology: Global VM Lock).
* thread.c (blocking_region_begin, blocking_region_end):
  save and clear th->blocking_region_buffer.
* thread.c (rb_thread_call_with_gvl): check if it has GVL.
* thread.c (ruby_thread_has_gvl_p): added.
* vm_core.h: add decls.



git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@21438 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2009-01-12 01:43:23 +00:00
kazu 38c5409667 rdoc update.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@21338 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2009-01-05 06:55:14 +00:00
ko1 9c04a0647f * thread.c (rb_thread_blocking_region): add a comment.
* thread.c (rb_thread_call_without_gvl): added as a alias of
  rb_thread_blocking_region().
* thread.c (rb_thread_call_with_gvl): added.
* vm_core.h (rb_thread_t#blocking_region_buffer): added for
  rb_thread_call_with_gvl().



git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@21185 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2008-12-30 07:57:53 +00:00
ko1 b2ad49565f * thread.c (rb_mutex_trylock): return false if Mutex owned
by current thread.  [ruby-core:20943]
* thread.c (rb_mutex_lock): check dead lock (recursive lock) here.
* test/ruby/test_thread.rb: add a test.



git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@21148 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2008-12-29 03:03:09 +00:00
mame b66af67f21 * thread.c (mutex_free, mutex_unlock): add qualifiers.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@21106 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2008-12-28 03:25:31 +00:00
mame 0e41458700 * thread.c (mutex_free): GC thread (main thread) has failed to unlock
a mutex that is locked by another thread, which makes the mutex
  dangling in keeping_mutexes and causes [BUG] or stuck finally.
  Now unlocking is performed as locking thread.

* thread.c (mutex_unlock, rb_mutex_unlock, rb_mutex_unlock_all):
  mutex_unlock receives a thread.


git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@21105 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2008-12-28 01:39:18 +00:00
nobu a94adfa245 * process.c (after_exec): needs to reset before restart timer
thread.

* thread.c (thread_start_func_2): stops timer thread if forked in
  the new thread.   [ruby-core:19385]


git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@21097 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2008-12-27 10:40:57 +00:00
nobu b5d2750bbc * thread.c (rb_thread_atfork, rb_thread_atfork_before_exec): DRY.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@21096 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2008-12-27 10:30:04 +00:00
nobu 011fc2649d * thread.c (thread_start_func_2): sets native thread key.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@20976 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2008-12-24 16:52:38 +00:00
akr b795b5c537 rdoc update.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@20917 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2008-12-22 12:29:04 +00:00
matz 13919e068b * thread.c (sleep_timeval): cast tv_usec to long to shut up
warnings on OSX.  [ruby-dev:37449]

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@20766 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2008-12-15 14:49:31 +00:00
matz bd4d9e9a35 * thread.c (rb_mutex_unlock): shut up warning. a patch from
Kazuhiro NISHIYAMA in [ruby-dev:37345]. fix #846

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@20615 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2008-12-10 16:30:40 +00:00
nobu 541915b239 * compile.c (iseq_compile_each), gc.c (assign_heap_slot),
(gc_mark_children), parse.y (vtable_alloc, vtable_free, vtable_add),
  proc.c (proc_to_s), thread.c (terminate_i, rb_thread_terminate_all),
  (thread_start_func_2, blocking_region_begin, blocking_region_end),
  (rb_thread_kill), thread_pthread.c (native_thread_create),
  (ubf_pthread_cond_signal), vm.c (check_env, thread_free), vm_dump.c
  (vm_env_dump_raw, vm_stack_dump_each, vm_thread_dump_state),
  (vm_call0): use void pointer for %p.


git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@20593 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2008-12-09 04:33:55 +00:00
akr e44a6c4708 move the previous comment.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@20447 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2008-12-02 10:00:10 +00:00
nobu 7348aa6113 * gc.c (ruby_stack_check): no check if using sigaltstack.
* signal.c (register_sigaltstack): minimum size is insufficient for
  method calls.

* signal.c (sigsegv): handles stack overflow if possible.

* thread.c (ruby_thread_stack_overflow): helper function to raise
  sysstack_error.

* thread_pthread.c (ruby_stack_overflowed_p): checks for stack
  overflow.


git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@20372 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2008-11-27 06:05:07 +00:00
nobu 4d6d0a933e * process.c (rb_fork): stops the timer thread during fork.
[ruby-dev:37117]

* thread.c (rb_thread_start_timer_thread): timer thread needs
  system_working to be set.


git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@20346 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2008-11-24 15:08:24 +00:00
nobu 5136031055 * thread.c (rb_barrier_wait): gets rid of recursive deadlock.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@20230 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2008-11-13 02:31:16 +00:00
nobu 31f16d7729 * thread.c (rb_barrier_{new,wait,release,destroy}): use Mutex so that
circular requires fail with deadlock.  [ruby-core:19821]


git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@20229 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2008-11-12 21:08:47 +00:00
nobu 99cd3c512b * load.c (rb_require_safe): destroys barrier after successfully
loaded, to get rid of loading same library again.  [ruby-core:19798]

* thread.c (rb_barrier_wait): can not wait destroyed barrier.

* thread.c (rb_barrier_destroy): destroys barrier so that no longer
  waited.


git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@20223 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2008-11-11 18:28:47 +00:00
nobu 641f43de97 * thread_pthread.c (thread_timer): checks working flags again.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@20160 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2008-11-08 15:31:05 +00:00
nobu 5732566f4d * thread.c (rb_thread_stop_timer_thread): terminates timer thread
immediately.


git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@20117 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2008-11-06 13:21:26 +00:00
nobu 88a4f33121 * include/ruby/intern.h (rb_mutex_synchronize): fixed prototype.
* thread.c (rb_mutex_synchronize): fixed function name.


git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@20102 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2008-11-03 16:56:49 +00:00
nobu 860fad971d * thread.c (blocking_region_{begin,end}): declared as inline.
* util.c (freedtoa): used only when MULTIPLE_THREADS is not defined.

* win32/win32.c (rb_w32_pipe): serial is DWORD.


git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@19945 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2008-10-26 09:01:23 +00:00
matz 22c8e88b41 * thread.c (rb_thread_wait_fd_rw): should not block by select if
there's only one thread living.  fixed [ruby-dev:36646].

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@19719 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2008-10-08 23:49:22 +00:00
nobu f8718692a2 * thread.c (thlist_signal): clears the woken thread if nothing woke.
* thread.c (rb_barrier_wait): achieves the lock if no thread was
  waiting yet.


git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@19573 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2008-09-26 08:02:07 +00:00
nobu 18684d9f7c * include/rubysig.h: old macros for backward compatibility.
* thread.c (BLOCKING_REGION): rewritten using helper functions.


git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@19562 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2008-09-26 00:47:18 +00:00
ko1 c431879a68 * thread.c (rb_thread_blocking_region): fix typo in a document.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@19479 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2008-09-23 08:58:13 +00:00
ko1 64c35be42c * thread.c (rb_thread_blocking_region): write a document
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@19478 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2008-09-23 08:51:33 +00:00
ko1 b9a12116fb * thread.c, include/ruby/intern.h (rb_thread_interrupted): added.
* io.c: use VALUE of thead instead of rb_tread_t to check interrupts.



git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@19477 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2008-09-23 08:17:17 +00:00
ko1 8cd252ac6f * common.mk: clean up
- remove blockinlining.$(OBJEXT) to built
  - make ENCODING_H_INCLDUES variable (include/ruby/encoding.h)
  - make VM_CORE_H_INCLUDES variable (vm_core.h)
  - simplify rules.
  - make depends rule to output depend status using gcc -MM.
* include/ruby/mvm.h, include/ruby/vm.h: rename mvm.h to vm.h.
* include/ruby.h: ditto.
* load.c: add inclusion explicitly.
* enumerator.c, object.c, parse.y, thread.c, vm_dump.c:
  remove useless inclusion.
* eval_intern.h: cleanup inclusion.
* vm_core.h: rb_thread_t should be defined in this file.
* vm_evalbody.c, vm_exec.c: rename vm_evalbody.c to vm_exec.c.
* vm.h, vm_exec.h: rename vm.h to vm_exec.h.
* insnhelper.h, vm_insnhelper.h: rename insnhelper.h to vm_insnhelper.h.
* vm.c, vm_insnhelper.c, vm_insnhelper.h:
  - rename vm_eval() to vm_exec_core().
  - rename vm_eval_body() to vm_exec().
  - cleanup include order.
* vm_method.c: fix comment.



git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@19466 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2008-09-23 00:20:28 +00:00
ko1 f0bf74a07b * iseq.c (iseq_data_to_ary): make it static.
* thread.c (thgroup_enclose): ditto.



git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@19146 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2008-09-04 18:23:27 +00:00
ko1 ca253f40db * thread.c (rb_thread_critical): removed.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@19144 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2008-09-04 17:41:40 +00:00
ko1 80843ea156 * thread.c (rb_thread_check_trap_pending): added for compatibility.
* ext/tk/tcltklib.c, ext/tk/tkutil/tkutil.c: remove ruby/signal.h
  dependency.



git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@19128 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2008-09-04 12:00:24 +00:00
nobu c5bf9ceef6 * vm_core.h (struct rb_vm_struct): replaced signal staff with trap
staff.

* signal.c (signal_buff): per process resouce now.

* signal.c (trap_list): moved to VM.

* signal.c (rb_get_next_signal): reverted.

* signal.c (rb_trap_exit): trap_pending_list was no longer used.

* thread.c (timer_thread_function): delivers buffered per-process
  signals to each VMs.

* vm.c (rb_vm_mark): marks trap_list.


git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@19119 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2008-09-04 04:22:04 +00:00
akr 94f421c9c0 fix a typo.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@18988 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2008-08-31 08:18:11 +00:00
ko1 ca6a8b1e2c * include/ruby/intern.h: rename RB_UBF_DFL to
RUBY_UBF_IO and RUBY_UBF_PROCESS.
  Because there is no default (universal) unblocking function.
* ext/socket/socket.c, file.c, io.c, process.c, thread.c: ditto.



git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@18985 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2008-08-31 07:44:24 +00:00
nobu 5f9c188d97 * include/ruby/ruby.h (rb_intern_const): tiny optimization.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@18653 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2008-08-16 00:20:31 +00:00
nobu 914969a040 * thread.c (rb_thread_priority_set): get rid of C99 feature.
* transcode.c (transcode_search_path): ditto.


git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@18606 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2008-08-14 05:56:51 +00:00
ko1 abfd87c230 * thread.c (rb_thread_execute_interrupts): switch event
should be occur only once.



git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@18596 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2008-08-13 21:26:49 +00:00
ko1 8f1e7a37e5 * thread.c (rb_thread_check_ints): added. please note that
this function may cause ruby's thread switching.
* include/ruby/intern.h: ditto.
* regint.h: use rb_thread_check_ints() instead of
  RUBY_CHECK_INTS() directly.



git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@18572 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2008-08-13 08:21:24 +00:00