Commit graph

1398 commits

Author SHA1 Message Date
mame
ccfe37884a Replace NODE_ALLOCA with T_IMEMO (imemo_alloc)
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@60239 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2017-10-21 08:40:28 +00:00
nobu
20685cdc85 Get rid of shadowing local variables
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@60204 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2017-10-18 04:35:25 +00:00
nobu
4fb1438b9d use rb_hash_new_with_size()
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@60101 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2017-10-02 12:23:17 +00:00
ko1
4f0c9a5cc4 move th->machine to ec->machine.
* vm_core.h: move rb_thread_t::machine to rb_execution_context_t::machine.

* vm_core.h, gc.c (rb_gc_mark_machine_stack): accept ec instead of th.
  it enables to call this func from rb_execution_context_mark() in vm.c.

* cont.c (fiber_setcontext): catch up this fix.
  fiber_restore_thread() restores machine stack information too.

* gc.c: catch up structure layout changes.

* thread.c: ditto.

* thread_pthread.c: ditto.

* thread_win32.c: ditto.


git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@59825 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2017-09-10 15:49:45 +00:00
kazu
b4ae747251 gc.c: fix typo: nubmer -> number
Signed-off-by: Antonio Terceiro <terceiro@softwarelivre.org>
[Bug #13862]

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@59739 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2017-09-04 12:15:06 +00:00
naruse
c5e4070c92 Increase STACKFRAME_FOR_CALL_CFUNC
On below env, miniruby requires 568 and ruby requires 838 to pass.
* ruby -v: ruby 2.5.0dev (2017-08-28 trunk 59670) [x86_64-freebsd10.3]
* gcc8 (FreeBSD Ports Collection) 8.0.0 20170828 (experimental)

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@59676 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2017-08-28 16:05:11 +00:00
nobu
1fe73fc948 gc.c: restore cfp at finalizer
* gc.c (run_finalizer): restore cfp for the case an exception
  raised in a finalizer.  [ruby-core:82432] [Bug #13832]

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@59649 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2017-08-23 04:01:39 +00:00
nobu
0f711026e2 gc.c: run all finalizers
* gc.c (run_finalizer): revert r59155 partially. finalizing loop
  should continue even after an exception is rescued.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@59647 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2017-08-23 02:26:02 +00:00
nobu
9c927f8c8b prevent stack overflow
* gc.c: enable PREVENT_STACK_OVERFLOW.

* vm.c (invoke_iseq_block_from_c): prevent stack overflow.

* vm_eval.c (stack_check): raise preallocated exception instance.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@59630 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2017-08-21 14:15:31 +00:00
nobu
b226a8b080 disable r59314 on mswin
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@59315 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2017-07-12 09:44:45 +00:00
nobu
5bdb4e0566 gc.c: restrict RGENGC_DEBUG
* gc.c (RGENGC_DEBUG_ENABLED): restrict runtime ruby_rgengc_debug
  level up to -RGENGC_DEBUG, to reduce runtime branches in inner
  loops.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@59314 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2017-07-12 05:30:43 +00:00
ko1
8dd9c12c58 move fields to ec.
* vm_core.h (rb_thread.h): move errinfo and trace_arg to
  rb_execution_context_t.

* cont.c (fiber_switch, rb_cont_call): do not restore "trace_arg" here.


git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@59199 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2017-06-28 14:27:49 +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
svn
2a46ba9423 * remove trailing spaces.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@59141 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2017-06-22 06:42:27 +00:00
ko1
de2ae27bd8 introduce heap_allocatable_pages_set().
* gc.c (heap_allocatable_pages_set): added. This function set
  heap_allocatable_pages and sorted_list atomically.


git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@59140 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2017-06-22 06:42:26 +00:00
ko1
f736cf3274 introduce GC_ASSERT().
* gc.c (GC_ASSERT()): added. GC_ASSERT() is similar to VM_ASSERT in
  vm_core.h but turn on by RGENGC_CHECK_MODE.


git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@59138 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2017-06-22 05:03:18 +00:00
nobu
7a1c10ba08 gc.c: expand sorted pages
* gc.c (heap_page_allocate): expand sorted pages before inserting
  allocated new page.  [Bug #12670]

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@59136 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2017-06-22 00:59:54 +00:00
nobu
ea57d84654 gc.c: FL_CHECK2
* gc.c (FL_TEST2, FL_SET2, FL_UNSET2): make error messages
  consitent.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@59135 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2017-06-21 12:51:26 +00:00
nobu
6af650256b RUBY_DEVEL flag
* configure.in: define RUBY_DEVEL only in the trunk.

* gc.c: enable runtime rgengc debug if RUBY_DEVEL

* ruby.c (debug_option): enable RUBY_DEBUG in --debug option only
  if RUBY_DEVEL.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@59131 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2017-06-21 04:34:25 +00:00
nobu
b589c47806 gc.c: add newline to report [ci skip]
* gc.c (gc_sweep_finish): gc_report format should end with a
  newline, as gc_report_body does not append it.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@59120 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2017-06-20 08:23:25 +00:00
nobu
22c8dcffe1 debug.c: rgengc debug option
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@59117 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2017-06-19 14:36:18 +00:00
nobu
581cd6cfad gc.c: duplicate rb_iseq_path by RSTRING_PTR
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@59064 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2017-06-12 04:35:52 +00:00
ko1
478003f6df rename absolute_path to realpath internally and introduce pathobj.
* vm_core.h: rename absolute_path to realpath because it is expected name.
  external APIs (#absolute_path methods) are remained.

* vm_core.h: remove rb_iseq_location_struct::path and
  rb_iseq_location_struct::absolute_path and introduce pathobj.
  if given path equals to given absolute_path (and most of case
  it is true), pathobj is simply given path String. If it is not same,
  pathobj is Array and pathobj[0] is path and pathobj[1] is realpath.

  This size optimization reduce 8 bytes and
  sizeof(struct rb_iseq_constant_body) is 200 bytes -> 192 bytes
  on 64bit CPU.

  To support this change, the following functions are introduced:
    * pathobj_path() (defined in vm_core.h)
    * pathobj_realpath() (ditto)
    * rb_iseq_path() (decl. in vm_core.h)
    * rb_iseq_realpath() (ditto)
    * rb_iseq_pathobj_new() (ditto)
    * rb_iseq_pathobj_set() (ditto)

* vm_core.h (rb_binding_t): use pathobj instead of path. If binding
  is given at eval methods, realpath (absolute_path) was caller's
  realpath. However, they should use binding's realpath.


git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@58979 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2017-06-01 00:05:33 +00:00
ko1
9e1624cfe8 Add debug counters.
* debug_counter.h: add the following counters to measure object types.
  obj_free: freed count
  obj_str_ptr: freed count of Strings they have extra buff.
  obj_str_embed: freed count of Strings they don't have extra buff.
  obj_str_shared: freed count of Strings they have shared extra buff.
  obj_str_nofree: freed count of Strings they are marked as nofree.
  obj_str_fstr: freed count of Strings they are marked as fstr.
  obj_ary_ptr: freed count of Arrays they have extra buff.
  obj_ary_embed: freed count of Arrays they don't have extra buff.
  obj_obj_ptr: freed count of Objects (T_OBJECT) they have extra buff.
  obj_obj_embed: freed count of Objects they don't have extra buff.


git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@58865 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2017-05-24 06:46:44 +00:00
nobu
ebd763c1f7 gc.c: checks of sizes
* gc.c (ruby_xmalloc, ruby_xmalloc2, ruby_xcalloc): move checks of
  sizes from objspace_xmalloc, objspace_xmalloc2, objspace_xcalloc,
  respectively.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@58674 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2017-05-12 07:48:08 +00:00
nobu
6ed69699cd gc.c: objspace_malloc_fixup
* gc.c (objspace_malloc_fixup): include allocated size
  managements.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@58673 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2017-05-12 07:48:05 +00:00
nobu
160d730ef4 gc.c: skip unnecessary check
* gc.c (wmap_aset): skip unnecessary size check.
  `2*sizeof(VALUE)` is static and should never overflow.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@58665 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2017-05-11 14:28:38 +00:00
nobu
8acaa122f5 gc.c: use the argument objspace
* gc.c (objspace_xrealloc): use the argument objspace, instead of
  the default object space.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@58664 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2017-05-11 14:28:37 +00:00
nobu
849bf24abf gc.c: check of size in ruby_sized_xrealloc
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@58652 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2017-05-10 14:25:03 +00:00
normal
9d09240d9e rb_execution_context_t: move stack, stack_size and cfp from rb_thread_t
The goal is to reduce rb_context_t and rb_fiber_t size
by removing the need to store the entire rb_thread_t in
there.

[ruby-core:81045] Work-in-progress: soon, we will move more fields here.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@58614 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2017-05-09 05:06:41 +00:00
nobu
5b3c9fc962 Get rid of unnecessary GCC extension
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@58464 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2017-04-24 04:20:02 +00:00
nobu
e601e77590 eval.c: copy special exceptions before raise
* eval.c (setup_exception): consider if the exception is frozen,
  but not one of special exception objects.

* gc.c (rb_memerror): copy minimum objects.

* thread.c (rb_threadptr_execute_interrupts): prepare special
  exception queued by another thread to be raised.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@58380 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2017-04-17 02:31:35 +00:00
nobu
61d9da258d gc.c: rb_threadptr_stack_check
* gc.c (rb_threadptr_stack_check): check probability of stack
  overflow for the given thread, not the current thread.

* vm_eval.c (stack_check): check the given thread, not the current
  thread.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@58375 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2017-04-17 00:10:47 +00:00
nobu
b0d3649479 gc.c: PREVENT_STACK_OVERFLOW
* gc.c (PREVENT_STACK_OVERFLOW): define TRUE to try preventing
  stack overflow before actually happens.

* gc.c (stack_check): parameterize thread pointer.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@58374 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2017-04-17 00:10:45 +00:00
nobu
a1caed95cb thread.c: during GC for thread
* thread.c (ruby_thread_stack_overflow): check if the given thread
  is during GC.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@58328 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2017-04-12 14:47:50 +00:00
nobu
79c50a77ff get rid of strcpy
* addr2line.c (follow_debuglink): insert global_debug_dir by using
  memmove instead of copying to temporary buffer.

* dln.c (dln_load): use memcpy with the known length instead of
  strcpy.

* gc.c (rb_gc_unprotect_logging): use strdup instead of malloc and
  strcpy.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@57189 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2016-12-26 09:28:46 +00:00
ktsj
9cbd6ee097 * vm_trace.c (tracepoint_attr_callee_id, rb_tracearg_callee_id):
add TracePoint#callee_id. [ruby-core:77241] [Feature #12747]

* cont.c, eval.c, gc.c, include/ruby/intern.h, insns.def, thread.c,
  vm.c, vm_backtrace.c, vm_core.h, vm_eval.c, vm_insnhelper.c, vm_trace.c: ditto.

* test/ruby/test_settracefunc.rb: tests for above.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@56593 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2016-11-05 13:15:27 +00:00
ko1
0b8ab5b0a8 * gc.c (heap_page_resurrect): do not return tomb_pages when
page->freelist == NULL.
  [Bug #12670]


git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@56558 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2016-11-04 08:54:46 +00:00
nobu
d94ea30a57 gc.c: fix GC_PROFILE_DETAIL_MEMORY
* gc.c (gc_prof_setup_new_record): fix the condition to get
  rusage.
* gc.c (gc_profile_dump_major_reason): remove undefined flags.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@56373 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2016-10-07 11:21:41 +00:00
nobu
0cc169d1de fid typos [ci skip]
* fix typos, "a" before "Integer" to "an".  [Fix GH-1438]

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@56225 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2016-09-24 02:28:25 +00:00
kazu
c6501cccb1 gc.c: fix rdoc of garbage_collect [ci skip]
* gc.c (gc_start_internal): [DOC] methods without arguments
  like r56194. [Bug #12777]

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@56201 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2016-09-22 04:06:53 +00:00
nobu
25049e983d gc.c: fix rdoc of garbage_collect [ci skip]
* gc.c (gc_start_internal): [DOC] add ObjectSpace.garbage_collect
  and fix GC#garbage_collect.  [Bug #12777]

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@56194 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2016-09-20 14:02:53 +00:00
nobu
68aa1d81cf gc.c: rb_gc_adjust_memory_usage
* gc.c (rb_gc_adjust_memory_usage): notify memory usage to the GC
  engine by extension libraries, to trigger GC.  [Feature #12690]

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@56189 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2016-09-20 07:52:25 +00:00
rhe
2f551849c4 Use PRIuSIZE format specifier for size_t values
Use PRIuSIZE instead of PRIdSIZE. This fixes the exception message shown
on too large xmalloc2. This commit also fixes other incorrect use of
PRIdSIZE in other functions; though most of them are debug print.

* gc.c (heap_extend_pages, get_envparam_size, ruby_malloc_size_overflow,
  gc_profile_dump_on): Use PRIuSIZE instead of PRIdSIZE as the passed
  value is size_t, not ssize_t.

* iseq.c (get_line_info, rb_iseq_disasm_insn): Ditto.

* sprintf.c (rb_str_format): Ditto.

* thread_win32.c (native_thread_create): Ditto.

* vm.c (get_param): Ditto.

* ext/objspace/objspace_dump.c (dump_append_string_content,
  dump_object): Ditto.

* ext/socket/raddrinfo.c (host_str, port_str): Ditto.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@56156 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2016-09-13 12:33:13 +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
kou
8ddc191df4 * gc.c (gc_reset_malloc_info): Remove too much ";".
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@56001 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2016-08-24 13:42:08 +00:00
ko1
e06698d257 * vm.c, internal.h: remove RubyVM::Env class and all of env objects
are imemo objects (imemo_env).

* NEWS: describe this change. I believe nobody touch these objects
  because there are no method defined.

* vm_core.h: remove the following definitions.
  * rb_cEnv decl.
  * GetEnvPtr() because Env is no longer T_DATA object.

* vm_core.h (rb_env_t): fix layout for imemo values.

* vm_core.h (vm_assert_env): added.

* vm_core.h (vm_env_new): added.


git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@55768 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2016-07-28 19:13:26 +00:00
ko1
9f60791a04 * vm_core.h: revisit the structure of frame, block and env.
[Bug #12628]

  This patch introduce many changes.

  * Introduce concept of "Block Handler (BH)" to represent
    passed blocks.

  * move rb_control_frame_t::flag to ep[0] (as a special local
    variable). This flags represents not only frame type, but also
    env flags such as escaped.

  * rename `rb_block_t` to `struct rb_block`.

  * Make Proc, Binding and RubyVM::Env objects wb-protected.

  Check [Bug #12628] for more details.


git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@55766 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2016-07-28 11:02:30 +00:00
nobu
3084f43047 gc.c: running finalizer state
* gc.c (run_finalizer): make saved running finalizer state
  volatile to ensure not to be clobbered by longjmp.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@55759 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2016-07-26 13:43:38 +00:00
ko1
78e86f75ed * gc.c (rb_raw_obj_info): support to show Proc obj.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@55754 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2016-07-26 10:07:12 +00:00