[前][次][番号順一覧][スレッド一覧]

ruby-changes:6236

From: nobu <ko1@a...>
Date: Tue, 1 Jul 2008 00:49:31 +0900 (JST)
Subject: [ruby-changes:6236] Ruby:r17748 (trunk): * gc.c (rb_newobj): abort GC phase before rb_bug.

nobu	2008-07-01 00:49:13 +0900 (Tue, 01 Jul 2008)

  New Revision: 17748

  Modified files:
    trunk/ChangeLog
    trunk/gc.c

  Log:
    * gc.c (rb_newobj): abort GC phase before rb_bug.



  http://svn.ruby-lang.org/cgi-bin/viewvc.cgi?view=rev&revision=17748

  http://svn.ruby-lang.org/cgi-bin/viewvc.cgi/trunk/ChangeLog?r1=17748&r2=17747&diff_format=u
  http://svn.ruby-lang.org/cgi-bin/viewvc.cgi/trunk/gc.c?r1=17748&r2=17747&diff_format=u

Index: ChangeLog
===================================================================
--- ChangeLog	(revision 17747)
+++ ChangeLog	(revision 17748)
@@ -1,3 +1,7 @@
+Tue Jul  1 00:49:11 2008  Nobuyoshi Nakada  <nobu@r...>
+
+	* gc.c (rb_newobj): abort GC phase before rb_bug.
+
 Mon Jun 30 23:15:07 2008  Yusuke Endoh  <mame@t...>
 
 	* test/openssl/test_ssl.rb (start_server): shutdown TCPServer before
Index: gc.c
===================================================================
--- gc.c	(revision 17747)
+++ gc.c	(revision 17748)
@@ -705,18 +705,25 @@
 VALUE
 rb_newobj(void)
 {
+#if USE_VALUE_CACHE || (defined(ENABLE_VM_OBJSPACE) && ENABLE_VM_OBJSPACE)
+    rb_thread_t *th = GET_THREAD();
+#endif
 #if USE_VALUE_CACHE
-    rb_thread_t *th = GET_THREAD();
     VALUE v = *th->value_cache_ptr;
+#endif
 #if defined(ENABLE_VM_OBJSPACE) && ENABLE_VM_OBJSPACE
     rb_objspace_t *objspace = th->vm->objspace;
 #else
     rb_objspace_t *objspace = &rb_objspace;
 #endif
 
-    if (during_gc)
-        rb_bug("object allocation during garbage collection phase");
+    if (during_gc) {
+	dont_gc = 1;
+	during_gc = 0;
+	rb_bug("object allocation during garbage collection phase");
+    }
 
+#if USE_VALUE_CACHE
     if (v) {
 	RBASIC(v)->flags = 0;
 	th->value_cache_ptr++;
@@ -731,9 +738,6 @@
 #endif
     return v;
 #else
-    rb_objspace_t *objspace = &rb_objspace;
-    if (during_gc)
-        rb_bug("object allocation during garbage collection phase");
     return rb_newobj_from_heap(objspace);
 #endif
 }
@@ -920,7 +924,7 @@
 
     if (end <= start) return;
     n = end - start;
-    mark_locations_array(&rb_objspace, start,n);
+    mark_locations_array(objspace, start, n);
 }
 
 void

--
ML: ruby-changes@q...
Info: http://www.atdot.net/~ko1/quickml/

[前][次][番号順一覧][スレッド一覧]