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

311 Коммитов

Автор SHA1 Сообщение Дата
ko1 91f3700296 should use `th`.
* signal.c (check_stack_overflow): ruby_stack_overflowed_p()
  should accept `th`.


git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@60475 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2017-10-27 06:01:21 +00:00
ko1 9d41e74398 refactoring (rb_|)threadptr_stack_overflow.
* vm_insnhelper.c (ec_stack_overflow): renamed from threadptr_stack_overflow
  and also rb_ec_stack_overflow is from rb_threadptr_stack_overflow
  because they accept `ec` instead of `th`.


git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@60464 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2017-10-27 01:13:35 +00:00
ko1 4552f74715 introduce EC_*_TAG() instead of TH_*_TAG()
* eval_intern.h:
  introduce EC_*_TAG() macros instead of TH_*_TAG() macros.
  * TH_PUSH_TAG() -> EC_PUSH_TAG()
  * TH_POP_TAG() -> EC_POP_TAG()
  * TH_TMPPOP_TAG() -> EC_TMPPOP_TAG()
  * TH_REPUSH_TAG() -> EC_REPUSH_TAG()
  * TH_EXEC_TAG() -> EC_EXEC_TAG()
  * TH_JUMP_TAG() -> EC_JUMP_TAG()

  rb_threadptr_tag_state() , rb_ec_tag_jump() also accept `ec` instead of `th`.


git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@60450 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2017-10-26 11:02:13 +00:00
ko1 837fd5e494 Use rb_execution_context_t instead of rb_thread_t
to represent execution context [Feature #14038]

* vm_core.h (rb_thread_t): rb_thread_t::ec is now a pointer.
  There are many code using `th` to represent execution context
  (such as cfp, VM stack and so on). To access `ec`, they need to
  use `th->ec->...` (adding one indirection) so that we need to
  replace them by passing `ec` instead of `th`.

* vm_core.h (GET_EC()): introduced to access current ec. Also
  remove `ruby_current_thread` global variable.

* cont.c (rb_context_t): introduce rb_context_t::thread_ptr instead of
  rb_context_t::thread_value.

* cont.c (ec_set_vm_stack): added to update vm_stack explicitly.

* cont.c (ec_switch): added to switch ec explicitly.

* cont.c (rb_fiber_close): added to terminate fibers explicitly.


git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@60440 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2017-10-26 08:32:49 +00:00
hsbt 0e2d2e6a79 Drop to support NaCl platform.
Because NaCl and PNaCl are already sunset status.
  see https://bugs.chromium.org/p/chromium/issues/detail?id=239656#c160

  configure.ac: Patch for this file was provided by @nobu.

  [Feature #14041][ruby-core:83497][fix GH-1726]

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@60374 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2017-10-23 05:56:25 +00:00
nobu 066e9a8b4a signal.c: fatal stack
* signal.c (check_stack_overflow): raise fatal when the last tag
  is in danger zone.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@59634 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2017-08-22 02:46:16 +00:00
nobu 2f3eef8ee0 signal.c: removed raise_stack_overflow:
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@59633 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2017-08-22 02:42:23 +00:00
nobu 083a25f903 vm_core.h: shrink trap_list size
* vm_core.h (rb_vm_struct): separate trap_list cmd and safe to
  each arrays, to shrink the size.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@59434 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2017-07-27 12:17:56 +00:00
ko1 1939d097e6 move several fields from rb_thread_t to rb_execution_context_t.
* vm_core.h (rb_thread_t): move several fields which are copied at cont.c
  to rb_execution_context_t.


git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@59177 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2017-06-26 07:56:44 +00:00
ko1 2108e55c0b use "enum ruby_tag_type" and TAG_NONE.
Return value of EXEC_TAG() is saved by "int state".
Instead of "int", use "enum ruby_tag_type". First EXEC_TAG()
value should be 0, so that define TAG_NONE (= 0) and use it.

Some code used "status" instead of "state". To make them clear,
rename them to state.

We can change variable name from "state" to "tag_state", but this
ticket doesn't contain it.


git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@59155 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2017-06-23 07:25:52 +00:00
ko1 6c3f1461cd remove ruby_kill() introduced for [Bug #7951].
* thread.c (rbuy_kill): removed. This function is used
  with SIGSEGV, SIGBUS, SIGKILL, SIGILL, SIGFPE and SIGSTOP
  and these signals are affect immediately. So that `kill(2)'
  is enough for them.

* signal.c (rb_f_kill): ditto.

* vm_core.h (rb_thread_t::interrupt_cond): removed because
  only `ruby_kill()' uses this field.

* test/ruby/test_signal.rb: Without this patch sending SIGSTOP to own
  process wait another interrupt even if another process sends SIGCONT.


git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@59066 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2017-06-12 04:52:25 +00:00
nobu 1b6e7a3de2 signal.c: do not disable handlers to dump core
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@59054 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2017-06-09 14:42:14 +00:00
nobu a4d8a6e148 signal.c: no sigsegv handler with valgrind
* signal.c: disable handling signals to dump core, if installing
  unreserved signals failed, not valgrind to hang on Mac OS.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@59052 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2017-06-09 13:02:13 +00:00
nobu 9f4db3bcdb signal.c: warn at unresserved signals
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@59051 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2017-06-09 08:30:24 +00:00
nobu a2f1c07fe4 signal.c: relax installation failure
* signal.c (install_sighandler): ignore failure at unreserved
  signals.  e.g., SIGUSR2 fails under valgrind.

* signal.c (install_sighandler_fail): refine [BUG] message.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@59046 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2017-06-08 07:41:38 +00:00
nobu 39c73ae2a6 refer flag variables regardless RUBY_DEBUG_ENV
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@58721 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2017-05-15 06:17:29 +00:00
nobu e97ac02f84 vm_insnhelper.c: rb_threadptr_stack_overflow
* vm_insnhelper.c (rb_threadptr_stack_overflow): move from
  thread.c and integrate with vm_stackoverflow.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@58379 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2017-04-17 02:08:41 +00:00
nobu 5e635a3678 signal.c: last tag page condition
* signal.c (check_stack_overflow): drop the last tag when it is
  close to the fault page, not same as sp page.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@58363 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2017-04-15 02:37:21 +00:00
nobu 6f1fbfd618 signal.c: prefer pthread_sigmask
* signal.c (raise_stack_overflow): prefer pthread_sigmask to
  sigprocmask, for multithreading.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@58361 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2017-04-15 02:07:01 +00:00
nobu f7b51fd28d signal.c: add sigprocmask guard
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@58354 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2017-04-14 16:07:45 +00:00
nobu 1e1a585300 signal.c: unblock signal
* signal.c (raise_stack_overflow): unblock the received signal, to
  receive the same signal again.  [ruby-core:79285] [Bug #13164]

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@58353 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2017-04-14 12:59:59 +00:00
nobu 8cbb7747cd signal.c: improve stack overflow check
* signal.c (check_stack_overflow): [EXPERIMENTAL] consider the
  segfault a stack overflow when the fault address is between SP
  and BP.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@56907 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2016-11-27 11:22:42 +00:00
nobu 6c8fc79f95 Update Signal.signame doc [ci-skip]
* signal.c (sig_signame): [DOC] Add documentation in the case of
  return nil.  [Fix GH-1449]

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@56280 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2016-09-28 04:00:27 +00:00
akr 577de1e93d replace fixnum by integer in documents.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@56102 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2016-09-08 04:57:49 +00:00
nobu 84f94652b0 use TH_JUMP_TAG
* vm_eval.c (rb_eval_cmd, rb_catch_obj): use TH_JUMP_TAG with the
  same rb_thread_t used for TH_PUSH_TAG, instead of JUMP_TAG with
  the current thread global variable.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@54914 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2016-05-05 03:22:20 +00:00
normal 667c0a3a8c Signal.list deduplicates keys
This allows us to reuse string objects used in symbols as well
as any string representations of signal names in source code.

* signal.c (sig_list): use fstring for hash key
* test/ruby/test_signal.rb (test_signal_list_dedupe_keys): added

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@53657 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2016-01-26 05:33:28 +00:00
nobu a52be8fb8f signal.c: reserved signals
* signal.c (rb_f_kill): should immediately deliver reserved
  signals SIGILL and SIGFPE, ont only SIGSEGV and SIGBUS.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@53656 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2016-01-26 04:09:31 +00:00
nobu 13a935b0ba Drop support for BeOS
* beos: Drop support for BeOS now that Haiku is stable.
  [Fix GH-1112]

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@52731 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2015-11-24 00:17:11 +00:00
nobu e29c109d2a Haiku now best effort support
* configure.in: remove obsolete workarounds for Haiku.
* dln.c, file.c, io.c: remove obsolete Haiku workarounds.
* thread_pthread.c: add stack bounds detection for Haiku.
* signal.c: get stack pointer from signal context on Haiku.
  [ruby-core:67923] [Bug #10811] [Fix GH-1109]

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@52721 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2015-11-23 03:54:42 +00:00
ko1 95273072a7 * signal.c: should also clear ruby_disable_gc.
[Bug #11692]




git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@52668 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2015-11-19 06:54:35 +00:00
nobu 46b39cb0ba revert r31760 and r31761
seems that rb_bug_errno() is called in sigpipe() intentionally.
https://gist.github.com/sorah/831169

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@51390 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2015-07-26 05:37:59 +00:00
nobu 38e62df9f6 signal.c: discard SIGSYS
* signal.c (default_handler, Init_signal): discard SIGSYS, ENOSYS
  should raise a SystemCallError always instead.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@51389 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2015-07-26 02:29:03 +00:00
normal a3dca0f594 signal.c (trap_handler): cleanup to use RSTRING_GETMEM + memcmp
strncmp is unnecessary since the switch/case statement already
checks length of the string; so use memcmp.

This makes for a small reduction in binary size on 32-bit x86:

   text	   data	    bss	    dec	    hex	filename
2847473	  12360	  30632	2890465	 2c1ae1	ruby.before
2847313	  12328	  30632	2890273	 2c1a21	ruby.after

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@51287 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2015-07-17 22:08:49 +00:00
hsbt 5d6ca9e950 * include/ruby/ruby.h: $SAFE=2 is now obsolete.
* dir.c, ext/fiddle/handle.c, ext/socket/basicsocket.c, file.c
  gc.c, io.c, process.c, safe.c, signal.c, win32/file.c:
  removed code for $SAFE=2
* test/erb/test_erb.rb, test/fiddle/test_handle.rb
  test/ruby/test_env.rb: removed tests for $SAFE=2.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@50958 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2015-06-18 14:21:03 +00:00
nobu 76d1d5269f signal.c: nil for invalid signum
* signal.c (sig_signame): return nil if the argument is a valid
  signal number.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@49801 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2015-03-02 04:04:30 +00:00
normal be5b7f6130 signal.c: preserve errno
* signal.c (sighandler): preserve errno
  Patch by Steven Stewart-Gallus <sstewartgallus00@mylangara.bc.ca>
  [ruby-core:68172] [Bug #10866]

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@49746 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2015-02-25 09:17:17 +00:00
nobu 0d20fbe3bd eval.c: static IDs
* eval.c (ruby_static_id_signo, ruby_static_id_status): add static
  IDs, signo and status.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@49700 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2015-02-23 07:05:30 +00:00
nobu 0f7bd5738b signal.c: SIGBUS by stack overflow on Funtoo
* signal.c (sigbus): seems that Funtoo Linux also delivers SIGBUS
  at stack overflow.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@49463 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2015-02-01 00:29:02 +00:00
nobu 1634ac4d64 signal.c: fix received_signal
* signal.c (received_signal): fix condition to define.
  [ruby-core:67032] [Bug #10629]

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@48920 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2014-12-22 05:08:34 +00:00
nobu d33830308f signal.c: clear received signal at stack overflow
* signal.c (check_stack_overflow): clear the received reserved
  signal before raising stack overflow but not aborting.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@48910 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2014-12-21 02:35:44 +00:00
usa 42496f2f33 * signal.c (ruby_signal): since SIGKILL is not supported by MSVCRT,
should be treated before calling signal(2).
  [Bug #10615]


git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@48884 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2014-12-18 05:26:57 +00:00
nobu 554da7feee signal.c: include ucontext.h
* signal.c: include ucontext.h for ucontext_t.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@48830 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2014-12-13 21:31:31 +00:00
nobu 02e8b4d9a8 signal.c: stack overflow on FreeBSD
* signal.c (check_stack_overflow): check sp also on i386/x86_64
  FreeBSD.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@48827 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2014-12-13 09:01:59 +00:00
nobu 7dc4bbc140 configure.in: rb_cv_mcontext_t_ptr
* configure.in (rb_cv_mcontext_t_ptr): abstract whether mcontext_t
  is a pointer type.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@48826 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2014-12-13 08:59:54 +00:00
akr 2b9191e557 * internal.h: Gather declarations in non-header files.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@48480 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2014-11-18 15:13:05 +00:00
akr 7cd76ab0c5 * internal.h: Include ruby.h and ruby/encoding.h to be
includable without prior inclusion.



git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@48447 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2014-11-15 11:49:06 +00:00
nobu eae536ec3a signal.c: signal list to kill
* signal.c (rb_f_kill): [DOC] mention known signal list.
  [ruby-core:66162] [Bug #10492]

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@48358 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2014-11-10 07:09:45 +00:00
normal cbb79f0472 signal.c: avoid repeated disable/enable interrupt
We only install system-level signal handlers during init (before any
threads or user code is running), so there's no need to repeatedly
enable/disable the interrupts at that time.  We also do not change
system-level sig handlers once user-level code is running.

This saves about 20 syscalls at startup and makes the executable
smaller (numbers from 32-bit x86):

        text       data     bss     dec     hex filename
before: 2815726   12100   30552 2858378  2b9d8a ruby
 after: 2815022   12100   30552 2857674  2b9aca ruby

* signal.c (install_sighandler): remove rb_disable_interrupt and
  rb_enable_interrupt calls
  (init_sigchld): ditto
  (Init_signal): disable and enable interrupt once around all
  install_sighandler and init_sigchld to reduce syscalls at start
  [Feature #9345] [ruby-core:59480]

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@48178 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2014-10-28 18:39:45 +00:00
kazu a5e1dbf7c8 * signal.c (check_reserved_signal_): fix write count since r47991.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@48124 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2014-10-24 11:44:01 +00:00
nobu b45c9f60a3 signal.c: adjust indent of preprocessing directives
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@48037 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2014-10-19 17:34:09 +00:00