ruby-changes:4895
From: ko1@a...
Date: Mon, 12 May 2008 15:29:01 +0900 (JST)
Subject: [ruby-changes:4895] akr - Ruby:r16388 (trunk): * gc.c (ruby_vm_xmalloc): increase malloc_increase only if malloc
akr 2008-05-12 15:28:43 +0900 (Mon, 12 May 2008) New Revision: 16388 Modified files: trunk/ChangeLog trunk/gc.c Log: * gc.c (ruby_vm_xmalloc): increase malloc_increase only if malloc succeeds. failed malloc size can be huge. it may increase malloc_limit too big which cause less GC and memory full. (ruby_vm_xrealloc): ditto. (rb_objspace): make params.limit and params.increase size_t. http://svn.ruby-lang.org/cgi-bin/viewvc.cgi/trunk/ChangeLog?r1=16388&r2=16387&diff_format=u http://svn.ruby-lang.org/cgi-bin/viewvc.cgi/trunk/gc.c?r1=16388&r2=16387&diff_format=u Index: ChangeLog =================================================================== --- ChangeLog (revision 16387) +++ ChangeLog (revision 16388) @@ -1,3 +1,11 @@ +Mon May 12 15:20:02 2008 Tanaka Akira <akr@f...> + + * gc.c (ruby_vm_xmalloc): increase malloc_increase only if malloc + succeeds. failed malloc size can be huge. it may increase + malloc_limit too big which cause less GC and memory full. + (ruby_vm_xrealloc): ditto. + (rb_objspace): make params.limit and params.increase size_t. + Mon May 12 15:04:58 2008 Yukihiro Matsumoto <matz@r...> * re.c (rb_reg_prepare_re): made non static with small refactoring. Index: gc.c =================================================================== --- gc.c (revision 16387) +++ gc.c (revision 16388) @@ -145,8 +145,8 @@ typedef struct rb_objspace { struct { - unsigned long limit; - unsigned long increase; + size_t limit; + size_t increase; } params; struct { size_t increment; @@ -314,9 +314,8 @@ rb_raise(rb_eNoMemError, "negative allocation size (or too big)"); } if (size == 0) size = 1; - malloc_increase += size; - if (ruby_gc_stress || malloc_increase > malloc_limit) { + if (ruby_gc_stress || (malloc_increase+size) > malloc_limit) { garbage_collect(objspace); } RUBY_CRITICAL(mem = malloc(size)); @@ -328,6 +327,7 @@ rb_memerror(); } } + malloc_increase += size; return mem; } @@ -381,7 +381,6 @@ } if (!ptr) return ruby_xmalloc(size); if (size == 0) size = 1; - malloc_increase += size; if (ruby_gc_stress) garbage_collect(objspace); RUBY_CRITICAL(mem = realloc(ptr, size)); if (!mem) { @@ -392,6 +391,7 @@ rb_memerror(); } } + malloc_increase += size; return mem; } -- ML: ruby-changes@q... Info: http://www.atdot.net/~ko1/quickml/