aboutsummaryrefslogtreecommitdiffstats
Commit message (Collapse)AuthorAgeFilesLines
* * gc.c: add support to estimate increase of oldspace memory usage.ko12013-11-057-130/+247
| | | | | | | | | | | | | | | | | | | | | | | | | | | | This is another approach to solve an issue discussed at r43530. This feature is diabled as default. This feature measures an increment of memory consuption by oldgen objects. It measures memory consumption for each objects when the object is promoted. However, measurement of memory consumption is not accurate now. So that this measurement is `estimation'. To implement this feature, move memsize_of() function from ext/objspace/objspace.c and expose rb_obj_memsize_of(). Some memsize() functions for T_DATA (T_TYPEDDATA) have problem to measure memory size, so that we ignores T_DATA objects now. For example, some functions skip NULL check for pointer. The macro RGENGC_ESTIMATE_OLDSPACE enables/disables this feature, and turned off as default. We need to compare 3gen GC and this feature carefully. (it is possible to enable both feature) We need a help to compare them. * internal.h: expose rb_obj_memsize_of(). * ext/objspace/objspace.c: use rb_obj_memsize_of() function. * cont.c (fiber_memsize): fix to check NULL. * variable.c (autoload_memsize): ditto. * vm.c (vm_memsize): ditto. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@43532 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* * gc.c (GC_MALLOC_LIMIT_MAX): fix default value 512MB -> 384MB.ko12013-11-042-1/+6
| | | | | | | | 512MB is huge. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@43531 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* * gc.c: add 3gen GC patch, but disabled as default.ko12013-11-044-128/+388
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | RGenGC is designed as 2 generational GC, young and old generation. Young objects will be promoted to old objects after one GC. Old objects are not collect until major (full) GC. The issue of this approach is some objects can promoted as old objects accidentally and not freed until major GC. Major GC is not frequently so short-lived but accidentally becoming old objects are not freed. For example, the program "loop{Array.new(1_000_000)}" consumes huge memories because short lived objects (an array which has 1M elements) are promoted while GC and they are not freed before major GC. To solve this problem, generational GC with more generations technique is known. This patch implements three generations gen GC. At first, newly created objects are "Infant" objects. After surviving one GC, "Infant" objects are promoted to "Young" objects. "Young" objects are promoted to "Old" objects after surviving next GC. "Infant" and "Young" objects are collected if it is not marked while minor GC. So that this technique solves this problem. Representation of generations: * Infant: !FL_PROMOTED and !oldgen_bitmap [00] * Young : FL_PROMOTED and !oldgen_bitmap [10] * Old : FL_PROMOTED and oldgen_bitmap [11] The macro "RGENGC_THREEGEN" enables/disables this feature, and turned off as default because there are several problems. (1) Failed sometimes (Heisenbugs). (2) Performance down. Especially on write barriers. We need to detect Young or Old object by oldgen_bitmap. It is slower than checking flags. To evaluate this feature on more applications, I commit this patch. Reports are very welcome. This patch includes some refactoring (renaming names, etc). * include/ruby/ruby.h: catch up 3gen GC. * .gdbinit: fix to show a prompt "[PROMOTED]" for promoted objects. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@43530 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* * node.h: catch up comments for last commit.ko12013-11-042-2/+6
| | | | git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@43529 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* * 2013-11-05svn2013-11-041-2/+2
| | | | git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@43528 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* * include/ruby/ruby.h: rename FL_OLDGEN to FL_PROMOTED.ko12013-11-045-14/+21
| | | | | | | | | This flag represents that "this object is promoted at least once." * gc.c, debug.c, object.c: catch up this change. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@43527 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* * test/xmlrpc: Don't use fixed ports: 8070 and 8071.akr2013-11-044-12/+18
| | | | git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@43526 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* fix a typokazu2013-11-041-1/+1
| | | | git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@43525 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* * test/xmlrpc/webrick_testing.rb (start_server): Initialize the serverakr2013-11-042-12/+14
| | | | | | | | at main thread to fail early. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@43524 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* * 2013-11-04svn2013-11-041-2/+2
| | | | git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@43523 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* eval_intern.h: avoid undefined behavior of setjmpnobu2013-11-042-4/+29
| | | | | | | | * eval_intern.h (TH_EXEC_TAG, TH_JUMP_TAG): get rid of undefined behavior of setjmp() in rhs of assignment expression. [ISO/IEC 9899:1999] 7.13.1.1 git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@43522 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* * sample/test.rb: Make temporary file names unique.akr2013-11-032-20/+26
| | | | git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@43521 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* gc.c: use booleannobu2013-11-031-3/+3
| | | | | | * gc.c (obj_free): use free_immediately as boolean. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@43520 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* ifchange: no overwrite with an empty filenobu2013-11-032-4/+16
| | | | | | | * tool/ifchange, win32/ifchange.bat: do not overwrite with an empty file by default, and add --empty option to force it. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@43519 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* * test/xmlrpc: Wrap definitions by TestXMLRPC module.akr2013-11-038-0/+18
| | | | git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@43518 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* * test/xmlrpc/webrick_testing.rb (stop_server): Don't try to shutdownakr2013-11-032-0/+6
| | | | | | | | the server if the server is not started. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@43517 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* gc.c: suppress warningnobu2013-11-031-1/+1
| | | | | | | * gc.c (obj_free): suppress a false shorten-64-to-32 warning, RUBY_TYPED_FREE_IMMEDIATELY never exceed the limit of int. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@43516 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* * 2013-11-03svn2013-11-031-2/+2
| | | | git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@43515 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* load.c: defer initalization of static-linked-extnobu2013-11-032-16/+59
| | | | | | | | | | | * load.c (rb_feature_p): deal with default loadable suffixes. * load.c (load_lock): initialize statically linked extensions. * load.c (search_required, rb_require_safe): deal with statically linked extensions. * load.c (ruby_init_ext): defer initalization of statically linked extensions until required actually. [Bug #8883] git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@43514 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* logger.rb: fix r43511 for Windowsnobu2013-11-023-47/+41
| | | | | | | | | | * lib/logger.rb (Logger::LogDevice::LogDeviceMutex#lock_shift_log): open file can't be removed or renamed on Windows. [ruby-dev:47790] [Bug #9046] * test/logger/test_logger.rb (TestLogDevice#run_children): don't use fork. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@43513 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* * 2013-11-02svn2013-11-011-2/+2
| | | | git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@43512 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* * lib/logger.rb: Inter-process locking for log rotationnaruse2013-11-013-8/+161
| | | | | | | | Current implementation fails log rotation on multi process env. by sonots <sonots@gmail.com> https://github.com/ruby/ruby/pull/428 fix GH-428 [Bug #9046] git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@43511 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* fix typotarui2013-11-011-1/+1
| | | | git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@43510 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* gc.c: mark live objects onlynobu2013-11-012-1/+9
| | | | | | | * gc.c (wmap_mark_map): mark live objects only, but delete zombies. [ruby-dev:47787] [Bug #9069] git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@43509 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* * gc.c (struct heap_page, gc_page_sweep, gc_sweep): Refactoring fortarui2013-11-012-24/+20
| | | | | | | | | | | | performance. Add before_sweep condition to heap_page structure. * gc.c (rb_gc_force_recycle): Use before_sweep member. * gc.c (heap_is_before_sweep, is_before_sweep): Remove. They has not already been used. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@43508 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* test_m17n.rb: fix encodingnobu2013-11-011-1/+1
| | | | | | | * test/ruby/test_m17n.rb (test_scrub): fix expected encoding, for non-UTF-8 environment. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@43507 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* * gc.c (make_deferred): Refactoring. Collect codes which should betarui2013-11-012-20/+23
| | | | | | | | | | atomic. * gc.c (make_io_deferred, obj_free, rb_objspace_call_finalizer, gc_page_sweep): Correspond to the above. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@43506 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* * gc.c (typedef struct rb_objspace): Refactoring. Move some memberstarui2013-11-012-16/+43
| | | | | | | | | | | | | | | | | | | | | | | | | | | into profile member. * gc.c (newobj_of): Correspond to the above. * gc.c (finalize_list): Ditto. * gc.c (objspace_live_num): Ditto. * gc.c (gc_page_sweep): Ditto. * gc.c (rb_gc_force_recycle): Ditto. * gc.c (garbage_collect_body): Ditto. * gc.c (rb_gc_count): Ditto. * gc.c (gc_stat): Ditto. * gc.c (gc_prof_set_heap_info): Ditto. * gc.c (gc_profile_dump_on): Ditto. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@43505 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* transcode.c: fix segv in String.encode!nobu2013-11-011-1/+3
| | | | | | | * transcode.c (str_transcode0): fix segv in String.encode!. now rb_str_scrub() can return nil. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@43504 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* string.c: fix typonobu2013-11-013-1/+9
| | | | | | | * string.c (rb_str_scrub): fix typo, should yield invalid byte sequence to be scrubbed. reported by znz at IRC. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@43503 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* gc.c: zombie is not alivenobu2013-11-012-1/+9
| | | | | | | * gc.c (is_live_object): finalizer may not run because of lazy-sweep. [ruby-dev:47786] [Bug #9069] git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@43502 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* test_m17n.rb: nil replacementnobu2013-11-011-0/+2
| | | | | | | * test/ruby/test_m17n.rb (test_scrub, test_scrub_bang): now explicit nil is allowed as replacement. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@43501 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* string.c: export rb_str_scrubnobu2013-11-014-18/+19
| | | | | | | * string.c (rb_str_scrub): export with fixed length arguments, and allow nil as replacement string instead of omitting. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@43500 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* load.c: suppress warningnobu2013-11-011-5/+10
| | | | | | | * load.c (rb_load_internal): split to suppress false "clobbered" warning by gcc 4.4.5. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@43499 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* load.c: use local variablenobu2013-11-011-3/+3
| | | | | | | * load.c (rb_load_internal): use local variable th instead of GET_THREAD() for each time. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@43498 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* * thread.c (rb_mutex_struct): reduce rb_mutex_t size by 8 byteskosaki2013-10-312-1/+6
| | | | | | on 64bit platform. Patch by Eric Wong. [Feature #9068][ruby-core:58114] git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@43497 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* * 2013-11-01svn2013-10-311-3/+3
| | | | git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@43496 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* * benchmark/gc/gcbench.rb: print HWM (high water mark) if possible.ko12013-10-312-0/+11
| | | | git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@43495 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* * lib/rexml/parsers/streamparser.rb: Add dependency file require.kou2013-10-312-0/+8
| | | | | | | | [Bug #9062] [ruby-dev:47779] Reported by Ippei Obayashi. Thanks!!! git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@43480 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* * vm_method.c (rb_method_entry_make): fix to pass an ISeq value.ko12013-10-312-1/+6
| | | | | | | | OBJ_WRITTEN() accepts only VALUE. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@43479 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* * 2013-10-31svn2013-10-311-2/+2
| | | | git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@43478 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* Record dependency on Emacs 24.3 and update commentary.knu2013-10-311-2/+3
| | | | git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@43477 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* fix typoskazu2013-10-301-3/+3
| | | | git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@43476 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* misc/ruby-additional.el: Remove functions implemented in Emacs 24.3.knu2013-10-302-42/+7
| | | | | | | | | * misc/ruby-additional.el (ruby-brace-to-do-end) (ruby-do-end-to-brace, ruby-toggle-block): Remove functions that are already in the latest released version of Emacs (24.3). [Bug #7565] git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@43475 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* Makefile.sub: add missing config variablesnobu2013-10-302-0/+7
| | | | | | | * win32/Makefile.sub (config.status): add missing variables, PLATFORM_DIR and THREAD_MODEL. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@43474 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* * time.c (v2w): Normalize a rational value to an integer if possible.akr2013-10-302-0/+10
| | | | | | | [ruby-core:58070] [Bug #9059] reported by Isaac Schwabacher. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@43473 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* * array.c (rb_ary_uniq_bang): use rb_ary_modify_check() instead ofglass2013-10-302-2/+7
| | | | | | rb_ary_modify() because the array will be unshared soon. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@43472 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* * ext/psych/lib/psych/visitors/yaml_tree.rb: make less garbage whentenderlove2013-10-292-7/+16
| | | | | | testing if a string is binary. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@43471 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* * 2013-10-30svn2013-10-291-2/+2
| | | | git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@43470 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* * ext/psych/lib/psych/visitors/yaml_tree.rb: string subclasses shouldtenderlove2013-10-293-2/+16
| | | | | | | | | not be considered to be binary. Fixes Psych / GH 166 https://github.com/tenderlove/psych/issues/166 * test/psych/test_string.rb: test for fix git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@43469 b2dd03c8-39d4-4d8f-98ff-823fe69b080e