aboutsummaryrefslogtreecommitdiffstats
path: root/test/ruby/test_gc.rb
Commit message (Collapse)AuthorAgeFilesLines
* Revert "Revert "Manage AST NODEs out of GC""mame2017-10-271-0/+3
| | | | | | | This re-introduces r60485. This reverts commit 5a176b75b1187cbd3861c387bde65ff66396a07c. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@60488 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* Revert "Manage AST NODEs out of GC"mame2017-10-271-3/+0
| | | | | | This reverts commit 620ba74778bfdbdc34ffbb142d49ce84a0ef58e9. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@60486 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* Manage AST NODEs out of GCmame2017-10-271-0/+3
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | NODEs in AST are no longer objects managed by GC. This change will remove the restriction imposed by the GC. For example, a NODE can use more than five words (this is my primary purpose; we want to store the position data for each NODE, for coverage library), or even a NODE can have variable length (some kinds of NODEs have unused fields). To do this, however, we need more work, since Ripper still uses T_NODE objects managed by the GC. The life time of NODEs is more obvious than other kinds of objects; they are created at parsing, and they become disused immediately after compilation. This change releases all NODEs by a few `xfree`s after compilation, so performance will be improved a bit. In extreme example, `eval("x=1;" * 10000000)` runs much faster (40 sec. -> 7.8 sec. on my machine). The most important part of this change is `ast_t` struct, which has three contents: (1) NODE buffer (malloc'ed memory), (2) a reference to the root NODE, and (3) an array that contains objects that must be marked during parsing (such as literal objects). Some functions that had received `NODE*` arguments, must now receive `ast_t*`. * node.c, node.h: defines `ast_t` struct and related operations. * gc.c, internal.h: defines `imemo_ast`. * parse.y: makes `parser_params` struct have a reference to `ast_t`. Instead of `rb_node_newnode`, use `rb_ast_newnode` to create a NODE. * iseq.c, load.c, ruby.c, template/prelude.c.tmpl: modifies some functions to handle `ast_t*` instead of `NODE*`. * test/ruby/test_gc.rb: ad-hoc fix for a failed test. The test assumes GC eden is increased at startup by NODE object creation. However, this change now create no NODE object, so GC eden is not necessarily increased. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@60485 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* test_gc.rb: relax criterionnobu2017-09-241-1/+1
| | | | | | | * test/ruby/test_gc.rb (TestGc#test_expand_heap): relax the criterion and compare by epsilon. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@60011 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* gc.c: restore cfp at finalizernobu2017-08-231-0/+23
| | | | | | | * 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
* skip unless finalizers runnobu2017-08-231-1/+2
| | | | git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@59648 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* gc.c: run all finalizersnobu2017-08-231-0/+22
| | | | | | | * 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
* * gc.c (gc_mark_roots): should mark the VM object itself to markko12016-07-131-0/+7
| | | | | | | | | | | | singleton class of the VM object. Before this patch, we only set mark bit for the VM object and invoke mark function separately. [Bug #12583] * test/ruby/test_gc.rb: add a test. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@55663 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* Remove debug print introduced in r52386naruse2016-02-031-7/+0
| | | | git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@53727 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* * gc.c: rename PAGE_* to HEAP_PAGE_* because PAGE_SIZE is usedko12016-01-081-2/+2
| | | | | | | | | in Mac OS X. * test/ruby/test_gc.rb: catch up this fix. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@53471 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* * gc.c: rename constant names HEAP_* to PAGE_*.ko12016-01-081-2/+2
| | | | | | | | | Keys of GC::INTERNAL_CONSTANTS are also renamed. * test/ruby/test_gc.rb: catch up this fix. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@53468 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* Add frozen_string_literal: false for all filesnaruse2015-12-161-0/+1
| | | | | | When you change this to true, you may need to add more tests. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@53141 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* * test/ruby/test_gc.rb (test_expand_heap): relax condition (1->2).ko12015-12-101-1/+1
| | | | git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@53024 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* * gc.c (gc_start): force to invoke GC by GC.startko12015-11-191-0/+11
| | | | | | | | | | | even if it is GC.disable'd. * test/ruby/test_gc.rb: add a test. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@52672 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* explicitly overwrite signal handlingnaruse2015-10-301-0/+1
| | | | git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@52391 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* show parent process's signal mask from child processnaruse2015-10-301-13/+8
| | | | | | | Because this tests raises timeout on failure, and it doesn't reach assertions. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@52386 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* test_gc.rb: fix failure messagenobu2015-10-301-3/+3
| | | | | | | * test/ruby/test_gc.rb (test_interrupt_in_finalizer): append signal info to stderr outputs in a proc, not to a proc. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@52377 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* show child and parent signal masknaruse2015-10-301-2/+13
| | | | git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@52376 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* show signal mask on solarisnaruse2015-10-291-0/+1
| | | | git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@52364 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* revert experimental changes related to Solaris CInaruse2015-10-291-4/+1
| | | | git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@52363 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* increase timeout (with full GC)naruse2015-10-281-1/+2
| | | | git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@52331 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* write in shroternaruse2015-10-281-5/+1
| | | | git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@52319 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* suppress warnings: assigned but unused variablenaruse2015-10-271-2/+2
| | | | git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@52313 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* dumping core may take too much time for CInaruse2015-10-271-1/+7
| | | | git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@52311 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* test_gc.rb: dump hung up processnobu2015-08-131-1/+1
| | | | | | | * test/ruby/test_gc.rb (test_interrupt_in_finalizer): kill hung up process by SIGSEGV to dump the backtrace. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@51560 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* test_gc.rb: abort hung up processnobu2015-08-121-1/+1
| | | | | | | * test/ruby/test_gc.rb (test_interrupt_in_finalizer): abort hung up process to dump the backtrace instead of terminating. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@51551 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* test_gc.rb: timeout of test_interrupt_in_finalizernobu2015-08-121-3/+0
| | | | | | | * test/ruby/test_gc.rb (test_interrupt_in_finalizer): leave timeout to invoke_ruby. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@51540 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* test_gc.rb: check signal firstnobu2015-08-091-2/+6
| | | | | | | * test/ruby/test_gc.rb (test_interrupt_in_finalizer): check the signal terminated the process before messages. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@51513 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* use assert_raisenobu2015-06-021-1/+1
| | | | git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@50727 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* * test/ruby/test_gc.rb: increase timeout seconds for GC stressfulko12015-05-311-1/+1
| | | | | | | | debugging. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@50698 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* test_gc.rb: read binarynobu2015-02-051-1/+1
| | | | | | | * test/ruby/test_gc.rb (test_exception_in_finalizer): read in binary encoding to get rid of invalid byte sequence exception. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@49510 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* test_gc.rb: termsignobu2014-12-241-1/+5
| | | | | | | | * test/ruby/test_gc.rb (test_interrupt_in_finalizer): also check termsig to ensure killed by SIGINT. and try SIGSEGV to dump something. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@48974 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* test_gc.rb: workaround for Windowsnobu2014-12-131-18/+10
| | | | | | | * test/ruby/test_gc.rb (test_interrupt_in_finalizer): use inner process signal for Windows. [ruby-core:66825] [Bug #10595] git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@48833 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* test_gc.rb: waitnobu2014-12-131-3/+5
| | | | | | | * test/ruby/test_gc.rb (test_interrupt_in_finalizer): wait longer and send more interrupts for slower cases. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@48832 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* vm_trace.c: defer interrupts while postponed jobsnobu2014-12-131-0/+26
| | | | | | | | * vm_trace.c (rb_postponed_job_flush): mask signal trap interrupt too to defer handling after finalizers finished. [ruby-core:66825] [Bug #10595] git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@48829 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* * test/ruby/test_gc.rb (test_latest_gc_info): do test separatelyko12014-11-261-0/+2
| | | | | | | | to avoid mysterious behavior. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@48586 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* * test/lib/envutil.rb: Moved from test/ruby/.akr2014-11-131-2/+0
| | | | | | | | | | | | | | * test/lib/find_executable.rb: Ditto. * test/lib/memory_status.rb: Ditto. * test/lib/test/unit.rb: require envutil. * test/: Don't require envutil in test files. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@48409 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* * test/ruby/test_gc.rb: fix condition.ko12014-09-101-2/+2
| | | | git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@47510 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* * gc.c (gc_stat_internal): rename `heap_used' to `heap_allocated_pages'.ko12014-09-101-0/+13
| | | | | | | | | ref: [Feature #9924] * test/ruby/test_gc.rb: add constraints test for gc stat information. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@47493 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* * test/ruby/test_gc.rb: catch up last fix.ko12014-09-101-4/+4
| | | | git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@47489 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* * gc.c (rb_objspace_t::heap_pages): rename field names:ko12014-09-091-5/+5
| | | | | | | | | | | | | | | | | | | | * used -> allocated_pages * increment -> allocatable_pages * length -> sorted_length And remove unused `limt' field. * gc.c: rename macros: * heap_pages_used -> heap_allocated_pages * heap_pages_length -> heap_pages_sorted_length * heap_pages_increment -> heap_allocatable_pages * gc.c (gc_stat_internal): fix symbol names ref: [Feature #9924] https://docs.google.com/spreadsheets/d/11Ua4uBr6o0k-nORrZLEIIUkHJ9JRzRR0NyZfrhEEnc8/edit?usp=sharing Yellow color fields in this table are changed. * test/ruby/test_gc.rb: catch up this change. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@47471 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* * gc.c: fix major GC flags.ko12014-07-241-2/+2
| | | | | | | | | | | | * add GPR_FLAG_MAJOR_BY_FORCE, which indicates major GC by METHOD, CAPI and so on (see GC_BY). * remove GPR_FLAG_MAJOR_BY_RESCAN because not used. * remove GPR_FLAG_MAJOR_BY_STRESS, use FORCE instead. * test/ruby/test_gc.rb: catch up. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@46927 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* * gc.c: support `USE_RGENGC == 0'.ko12014-06-301-11/+20
| | | | | | | | * test/ruby/test_gc.rb: ditto. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@46622 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* * gc.c: invoke GC before memory allocation (xmalloc/xrealloc)ko12014-06-101-0/+18
| | | | | | | | | | when GC.stress = true. [Bug #9859] * test/ruby/test_gc.rb: add a test. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@46399 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* * test/ruby/test_gc.rb: allocate more objects to invoke GC by newobj.ko12014-06-031-1/+2
| | | | | | | | GC allows extending pages depends on heap_increment. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@46339 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* * test/ruby/test_gc.rb: more long timeout.ko12014-04-091-1/+1
| | | | | | | | This test failed under RGENGC_CHECK_MODE >= 2. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@45538 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* gc.c: avoid inadvertent pin-downnobu2014-03-301-0/+5
| | | | | | | | * gc.c (gc_info_decode): get rid of inadvertent dynamic symbol pin-down, and preserve encoding in error messages. also should not use RSTRING_PTR macro on function calls. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@45480 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* * test/ruby/test_gc.rb: ignore warning messages for running with -wko12014-02-171-1/+1
| | | | | | | | option such as chkbuild. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@45028 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* * gc.c: introduce new environment variableko12014-02-171-0/+10
| | | | | | | | | | | | | "RUBY_GC_HEAP_OLDOBJECT_LIMIT_FACTOR" to control major/minor GC frequency. Do full GC when the number of old objects is more than R * N where R is this factor and N is the number of old objects just after last full GC. * test/ruby/test_gc.rb: add a test. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@45021 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* test_gc.rb: relax assertionnobu2014-01-151-1/+1
| | | | | | | * test/ruby/test_gc.rb (test_profiler_total_time): GC time may be shorter than the timer resolution. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@44619 b2dd03c8-39d4-4d8f-98ff-823fe69b080e