This reduces the struct from 256 (from 288) bytes on my x86-64
system, allowing the struct to fit cleanly into 4 cache lines
(if a malloc implementation allows it).
* parse.y (struct parser_params): pack: 88 => 256 bytes on 64-bit
[ruby-core:70034] [Feature #11371]
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@51302 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* thread.c (rb_thread_terminate_all): reuse the tag pushed before
a loop, instead of pushing/popping same tag repeatedly.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@51301 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* thread.c (ppoll): fix the limit, timeout argument of poll(2) is
an int but not a time_t.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@51298 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* ext/pty/pty.c: [DOC] fix example typo, an old name at move from
PTY.open. [Fix GH-972]
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@51297 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* load.c (rb_require_internal): use TAG_RETURN not a magic number.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@51294 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* thread.c (vm_check_ints_blocking): gather common statements at
the end, and prefer LIKELY for Visual C optimization.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@51293 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* load.c (rb_load_internal0): do not raise any exceptions but
return the result tag state.
* load.c (rb_load_protect): reduce nested EXEC_TAGs.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@51292 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* gc.c (run_finalizer): set and restore safe level here to reduce
nested EXEC_TAGs.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@51291 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* eval.c (ruby_cleanup): error_handle() returns exit status to the
system, not internal error state, do not convert the exit status
again.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@51290 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Preparation for possible upcoming changes to timer thread. We need
to ensure signal handling and thread scheduling works after an exec
failure.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@51289 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
OpenBSD's limit is less than 128.
* test/socket/test_nonblock: use smaller buffer for sendmsg
Patch-by: Jeremy Evans <code@jeremyevans.net>
[ruby-core:70016] [Bug #11364]
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@51288 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
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
This is a preparation for [ruby-core:69892]
("io.c: avoid kwarg parsing in C API")
since I noticed ARGF.read_nonblock did not properly catch up to
the `exception: false' change.
* io.c (argf_read_nonblock): support `exception: false'
(io_nonblock_eof): new function
(io_read_nonblock): use io_nonblock_eof
(argf_getpartial): accept kwargs hash for `exception: false'
* test/ruby/test_argf.rb (test_read_nonblock): new test
[ruby-core:70000] [Feature #11358]
* NEWS: add item for ARGF.read_nonblock
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@51285 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* compile.c (iseq_compile_each): remove unused big flag, `while`
loop always leaves a result on the stack.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@51282 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* vm_core.h (RUBY_VM_CHECK_INTS): evaluate the argument only once
to get rid of inadvertent side effects.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@51281 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* thread.c (RUBY_VM_CHECK_INTS_BLOCKING): move from vm_core.h for
the static function rb_threadptr_pending_interrupt_empty_p.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@51280 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* vm_core.h (EXEC_EVENT_HOOK_ORIG): evaluate each arguments only
once to get rid of inadvertent side effects. fix use of `th`
variable in the second `if` statement.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@51279 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* include/ruby/encoding.h (ENC_CODERANGE_CLEAN_P): predicate that
tells if the coderange is clean, that is 7bit or valid, and no
needs to scrub.
* re.c (rb_reg_expr_str): use ENC_CODERANGE_CLEAN_P.
* string.c (enc_strlen, rb_enc_cr_str_buf_cat, rb_str_scrub):
ditto.
* string.c (rb_str_enumerate_chars): ditto, and suppress a warning
by gcc6.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@51278 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* test/ruby/test_range.rb (test_first_last): Add assertions to
test of `Range#last` with exclude_end true case. [Fix GH-970]
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@51276 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This function now also works in more places if ruby_current_thread
is unset.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@51275 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* lib/rinda/tuplespace.rb: remove enumerator require
* test/pathname/test_pathname.rb: ditto
Related to https://bugs.ruby-lang.org/issues/10902
but not a complete fix.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@51274 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Allocation functions do not do anything non-obvious to the
compiler, so there's no reason for volatile here.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@51271 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
rb_iseq_t::local_iseq is not constant data because
local_iseq::flip_cnt can be modified (commentted).
* compile.c: catch up this fix.
* iseq.c: ditto.
* vm_insnhelper.c: ditto.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@51269 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
with one of the timer thread FDs, the internal FD is diverted.
[Bug #11336] [ruby-core:69886] [Bug #11350] [ruby-core:69961]
* process.c (dup2_with_divert): new function for the above purpose.
* thread_pthread.c (rb_divert_reserved_fd): new function for
diverting reserved FD. If the given FD is the same as one of the
reserved FDs, the reserved FD number is internally changed.
It returns -1 when error. Otherwise, returns 0. It also returns
0 if there is no need to change reserved FD number.
* thread_win32.c (rb_divert_reserved_fd): always returns 0 because
of no reserved FDs.
* internal.h (rb_divert_reserved_fd): prototype declaration.
It is Ruby internal use only.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@51268 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
and VALUE *iseq to code.
* iseq.c (rb_iseq_disasm_insn): ditto.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@51267 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* string.c (rb_str_enumerate_lines): do not check if a block is
given twice. RETURN_ENUMERATOR includes rb_block_given_p()
check which is redundant here.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@51266 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* vm.c (REWIND_CFP): keep the arguments region inside the valid
value stack. [ruby-core:69969] [Bug #11352]
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@51264 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* vm.c (m_core_hash_merge_ptr): copy the arguments to the machine
stack before rewinding the control frame pointer and leaving the
arguments outside valid region of the value stack.
[ruby-core:69969] [Bug #11352]
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@51263 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Loaded features is an obvious candidate for fstring since
feature paths of Ruby sources are included in iseq locations,
and iseq locations are in the fstring table anyways.
Deduplicating expanded load path can reuse old objects, since since
repeated expansions may recycle before old expanded paths are GC-ed
away.
* load.c (rb_construct_expanded_load_path): fstring expanded path
(get_loaded_features_index): fstring feature path
(rb_provide_feature): ditto
[ruby-core:69871] [Feature #11331]
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@51261 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Favor passing VALUE args as-is and using PRisVALUE in format strings
to prevent premature GC. In this case, we are not fixing any real
bug because location path has other references, but this makes code
easier-to-review.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@51260 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
reserved FD. It should be closed in the exec system call due to the
O_CLOEXEC or FD_CLOEXEC flag. [Bug #11353] [ruby-core:69977]
* process.c (close_unless_reserved): new function to close FD unless
it is reserved for internal communication.
* thread_pthread.c (rb_reserved_fd_p): should check owner_process pid
to avoid false positive in forked child process.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@51255 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* proc.c (proc_mark): remove redundant check
* vm.c (env_mark): ditto
This doesn't change object code size, but the unstripped
executable is smaller and the code less confusing.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@51253 b2dd03c8-39d4-4d8f-98ff-823fe69b080e