aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--ChangeLog7
-rw-r--r--gc.c10
2 files changed, 15 insertions, 2 deletions
diff --git a/ChangeLog b/ChangeLog
index f5c2759daa..08f7ac2c64 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,10 @@
+Sun Mar 24 12:55:47 2013 Narihiro Nakamura <authornari@gmail.com>
+
+ * gc.c: We have no chance to expand the heap when lazy sweeping is
+ restricted. So collecting is often invoked if there is not
+ enough free space in the heap. Try to expand heap when this is
+ the case.
+
Sun Mar 24 11:03:31 2013 Tanaka Akira <akr@fsij.org>
* test/ruby/test_require.rb: Remove temporally files in the tests.
diff --git a/gc.c b/gc.c
index 635e3ecadf..38bdcfd04b 100644
--- a/gc.c
+++ b/gc.c
@@ -2043,8 +2043,14 @@ gc_prepare_free_objects(rb_objspace_t *objspace)
{
int res;
- if (objspace->flags.dont_lazy_sweep)
- return garbage_collect(objspace);
+ if (objspace->flags.dont_lazy_sweep) {
+ if (heaps_increment(objspace)) {
+ return;
+ }
+ else {
+ return garbage_collect(objspace);
+ }
+ }
if (!ready_to_gc(objspace)) return TRUE;