aboutsummaryrefslogtreecommitdiffstats
path: root/thread.c
Commit message (Collapse)AuthorAgeFilesLines
* Add rb_adjust_argv_kw_splat to internal.hJeremy Evans2019-09-261-2/+0
| | | | | We are calling this in a few other files, it is better to have it in a header than adding prototypes to the other files.
* Check the argument sizeNobuyoshi Nakada2019-09-271-0/+1
| | | | | Ensure that argument array size does not overflow as `int`, before cast in thread_do_start after new thread created.
* Fix shorten-64-to-32 compile warnings/errorsJeremy Evans2019-09-261-1/+1
|
* Fix keyword argument separation issues in Thread.newJeremy Evans2019-09-261-3/+10
|
* Adjusted directives order of a function [ci skip]Nobuyoshi Nakada2019-09-231-1/+3
|
* Lazy init thread local storageLourens Naudé2019-09-231-6/+24
|
* Only set RB_PASS_CALLED_KEYWORDS in C functions called directly from RubyJeremy Evans2019-09-141-1/+1
| | | | | | | | | | | It is not safe to set this in C functions that can be called from other C functions, as in the non argument-delegation case, you can end up calling a Ruby method with a flag indicating keywords are set without passing keywords. Introduce some new *_kw functions that take a kw_splat flag and use these functions to set RB_PASS_CALLED_KEYWORDS in places where we know we are delegating methods (e.g. Class#new, Method#call)
* Add VM_NO_KEYWORDSJeremy Evans2019-09-051-1/+1
| | | | | I think this is easier to read than using literal 0 with comments in every case where it is used.
* Propagate kw_splat informationYusuke Endoh2019-09-051-1/+1
| | | | | | | The kw_splat flag is whether the original call passes keyword or not. Some types of methods (e.g., bmethod and sym_proc) drops the information. This change tries to propagate the flag to the final callee, as far as I can.
* drop-in type check for rb_define_singleton_method卜部昌平2019-08-291-30/+42
| | | | | | We can check the function pointer passed to rb_define_singleton_method like how we do so in rb_define_method. Doing so revealed many arity mismatches.
* rb_uninterruptible now free from ANYARGS卜部昌平2019-08-271-1/+1
| | | | | | After 5e86b005c0f2ef30df2f9906c7e2f3abefe286a2, I now think ANYARGS is dangerous and should be extinct. This function has only one call site so adding appropriate prototype is trivial.
* rb_thread_create now free from ANYARGS卜部昌平2019-08-271-2/+2
| | | | | | After 5e86b005c0f2ef30df2f9906c7e2f3abefe286a2, I now think ANYARGS is dangerous and should be extinct. This commit deletes ANYARGS from rb_thread_create, which seems very safe to do.
* unsigned int should have enough bits for rb_thread_shield_waitingNobuyoshi Nakada2019-08-191-5/+11
|
* gc.h is required on mswin build.Koichi Sasada2019-08-091-0/+1
| | | | thread.c requires gc.h on mswin build. Sorry.
* add rp() and bp() in internal.h.Koichi Sasada2019-08-091-1/+0
| | | | | | | | debug utility macro rp() (rp_m()) and bp() are introduced. * rp(obj) shows obj information w/o any side-effect to STDERR. * rp_m(m, obj) is similar to rp(obj), but show m before. * bp() is alias of ruby_debug_breakpoint(), which is registered as a breakpoint in run.gdb (used by `make gdb` or make gdb-ruby`).
* Remove `rb_vm_push_frame` as it is no longer used.Samuel Williams2019-07-191-11/+0
|
* check return value of blocking_region_begin().Koichi Sasada2019-07-151-1/+2
| | | | | blocking_region_begin() can return FALSE if it fails to acquire GVL, so check it.
* thread.c (rb_thread_shield_waiting_{inc,dec}): prefer long to intYusuke Endoh2019-07-151-4/+4
| | | | | | `(unsigned int)(THREAD_SHIELD_WAITING_MASK>>THREAD_SHIELD_WAITING_SHIFT)` is 0xffffffff, and w > 0xffffffff is always true. Coverity Scan pointed out this issue.
* [DOC] Re-apply r11000, 41256fd43275c8bf66460510da7ab958a802e2a2Nobuyoshi Nakada2019-06-281-8/+6
| | | | | | | * eval.c (rb_thread_kill): fix Thread#kill docs, which returns the thread object in all cases. From: why the lucky stiff <why@ruby-lang.org>
* Transition root fiber into state FIBER_TERMINATED.Samuel Williams2019-06-201-2/+3
| | | | | | | During fork, it's possible that threads with root fibers are terminated, but fiber state is not updated. `fiber_verify` will subsequently fail. We forcefully enter the FIBER_TERMINATED state when terminating the root fiber.
* Ensure that vm_stack is cleared in `thread_cleanup_func_before_exec`.Samuel Williams2019-06-201-4/+12
| | | | | | | | If `vm_stack` is left dangling in a forked process, the gc attempts to scan it, but it is invalid and will cause a segfault. Therefore, we clear it before forking. In order to simplify this, `rb_ec_clear_vm_stack` was introduced.
* Revert failed attempt at fixing invalid usage of vm_stack.Samuel Williams2019-06-201-13/+4
|
* Don't clear cfp, it causes problems.Samuel Williams2019-06-201-5/+2
|
* Skip `rb_ec_clear_vm_stack` for now.Samuel Williams2019-06-201-2/+5
|
* * remove trailing spaces.git2019-06-201-1/+1
|
* Ensure `vm_stack` is cleared after fork.Samuel Williams2019-06-201-0/+4
|
* Fix typo in VM_ASSERT.Samuel Williams2019-06-201-2/+2
|
* Extra assertions around thread.Samuel Williams2019-06-201-4/+9
|
* Don't change vm_stack/cfp without acquiring gvl first.Samuel Williams2019-06-201-1/+4
|
* Remove IA64 support.Samuel Williams2019-06-191-19/+3
|
* * remove trailing spaces, expand tabs.git2019-06-191-10/+10
|
* Use shared implementation of `rb_ec_initialize_vm_stack`.Samuel Williams2019-06-191-10/+1
|
* Update `stack_start` and `stack_maxsize` according to stack direction.Samuel Williams2019-06-191-2/+3
|
* Make sure `alloca` fast path is used (inline assembler).Samuel Williams2019-06-191-2/+6
|
* Track how stack was allocated for `cont_free`.Samuel Williams2019-06-191-1/+1
|
* Ensure execution context is cleared after thread is finished.Samuel Williams2019-06-191-1/+1
|
* Better handling of root fiber.Samuel Williams2019-06-191-13/+14
|
* Fix handling of vm_stack_size and avoid trying to deallocate it.Samuel Williams2019-06-191-11/+14
|
* Move vm stack init into thread.Samuel Williams2019-06-191-2/+26
|
* * expand tabs.git2019-05-271-2/+2
|
* Add FrozenError#receiverJeremy Evans2019-05-261-2/+2
| | | | | | | | | | | | | | | | | Similar to NameError#receiver, this returns the object on which the modification was attempted. This is useful as it can pinpoint exactly what is frozen. In many cases when a FrozenError is raised, you cannot determine from the context which object is frozen that you attempted to modify. Users of the current rb_error_frozen C function will have to switch to using rb_error_frozen_object or the new rb_frozen_error_raise in order to set the receiver of the FrozenError. To allow the receiver to be set from Ruby, support an optional second argument to FrozenError#initialize. Implements [Feature #15751]
* Add `GC.compact` again.tenderlove2019-04-201-3/+3
| | | | | | 🙏 git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67620 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* Reverting compaction for nowtenderlove2019-04-171-3/+3
| | | | | | For some reason symbols (or classes) are being overridden in trunk git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67598 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* Adding `GC.compact` and compacting GC support.tenderlove2019-04-171-3/+3
| | | | | | | | | | | This commit adds the new method `GC.compact` and compacting GC support. Please see this issue for caveats: https://bugs.ruby-lang.org/issues/15626 [Feature #15626] git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67576 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* [DOC] fix markups [ci skip]nobu2019-03-281-4/+4
| | | | git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67354 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* introduce rb_nogvl C-API to mark ubf as async-signal-safenormal2019-01-041-8/+16
| | | | | | | | | | | | | | | | | | | | | | | | zlib and bignum both contain unblocking functions which are async-signal-safe and do not require spawning additional threads. We can execute those functions directly in signal handlers without incurring overhead of extra threads, so provide C-API users the ability to deal with that. Other C-API users may have similar need. This flexible API can supercede existing uses of rb_thread_call_without_gvl and rb_thread_call_without_gvl2 by introducing a flags argument to control behavior. Note: this API is NOT finalized. It needs approval from other committers. I prefer shorter name than previous rb_thread_call_without_gvl* functions because my eyes requires big fonts. [Bug #15499] git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66712 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* * expand tabs.svn2019-01-041-2/+2
| | | | git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66709 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* thread.c (call_without_gvl): spawn thread for UBF iff single-threadednormal2019-01-041-0/+8
| | | | | | | | | | | We need another native thread to call some unblocking functions which aren't RUBY_UBF_IO or RUBY_UBF_PROCESS. Instead of a permanent thread in <= 2.5, we can now rely on the thread cache feature to perform interrupts. [ruby-core:90865] [Bug #15499] git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66708 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* thread_sync.c (rb_mutex_t): eliminate fork_gennormal2018-12-221-1/+0
| | | | | | | | | | | | | | | | | | The true bug fork_gen was hiding was rb_mutex_abandon_locking_mutex failing to unconditionally clear the waitq of mutexes it was waiting on. So we fix rb_mutex_abandon_locking_mutex, instead, and eliminate rb_mutex_cleanup_keeping_mutexes. This commit was tested heavily on a single-core Pentium-M which was my most reliable reproducer of the "crash.rb" script from [Bug #15383] [Bug #14578] [Bug #15383] Note: [Bug #15430] turned out to be an entirely different problem: RLIMIT_NPROC limit was hit on the CI VMs. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66489 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* Prefer rb_check_arity when 0 or 1 argumentsnobu2018-12-061-20/+18
| | | | | | | Especially over checking argc then calling rb_scan_args just to raise an ArgumentError. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66238 b2dd03c8-39d4-4d8f-98ff-823fe69b080e