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

ruby-changes:35383

From: ko1 <ko1@a...>
Date: Tue, 9 Sep 2014 13:12:29 +0900 (JST)
Subject: [ruby-changes:35383] ko1:r47465 (trunk): * gc.c: remvoe ruby_disable_gc_stress and add ruby_disable_gc

ko1	2014-09-09 13:12:14 +0900 (Tue, 09 Sep 2014)

  New Revision: 47465

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

  Log:
    * gc.c: remvoe ruby_disable_gc_stress and add ruby_disable_gc
      to speed-up newobj_of().
    * gc.c (ready_to_gc): check ruby_disable_gc.
    * signal.c: use ruby_disable_gc.

  Modified files:
    trunk/ChangeLog
    trunk/gc.c
    trunk/signal.c
Index: ChangeLog
===================================================================
--- ChangeLog	(revision 47464)
+++ ChangeLog	(revision 47465)
@@ -1,3 +1,12 @@ https://github.com/ruby/ruby/blob/trunk/ChangeLog#L1
+Tue Sep  9 13:05:50 2014  Koichi Sasada  <ko1@a...>
+
+	* gc.c: remvoe ruby_disable_gc_stress and add ruby_disable_gc
+	  to speed-up newobj_of().
+
+	* gc.c (ready_to_gc): check ruby_disable_gc.
+
+	* signal.c: use ruby_disable_gc.
+
 Tue Sep  9 12:11:41 2014  Koichi Sasada  <ko1@a...>
 
 	* gc.c: rename gc_stat entries and check stat transition.
Index: gc.c
===================================================================
--- gc.c	(revision 47464)
+++ gc.c	(revision 47465)
@@ -728,7 +728,7 @@ struct RZombie { https://github.com/ruby/ruby/blob/trunk/gc.c#L728
 
 int ruby_gc_debug_indent = 0;
 VALUE rb_mGC;
-int ruby_disable_gc_stress = 0;
+int ruby_disable_gc = 0;
 
 void rb_gcdebug_print_obj_condition(VALUE obj);
 
@@ -1599,7 +1599,7 @@ newobj_of(VALUE klass, VALUE flags, VALU https://github.com/ruby/ruby/blob/trunk/gc.c#L1599
 	rb_bug("object allocation during garbage collection phase");
     }
 
-    if (UNLIKELY(ruby_gc_stress && !ruby_disable_gc_stress)) {
+    if (UNLIKELY(ruby_gc_stress)) {
 	if (!garbage_collect(objspace, FALSE, FALSE, FALSE, GPR_FLAG_NEWOBJ)) {
 	    rb_memerror();
 	}
@@ -5666,25 +5666,27 @@ enum { https://github.com/ruby/ruby/blob/trunk/gc.c#L5666
 #define gc_stress_full_mark_after_malloc_p() \
     (FIXNUM_P(ruby_gc_stress) && (FIX2LONG(ruby_gc_stress) & (1<<gc_stress_full_mark_after_malloc)))
 
-static int
+static void
 heap_ready_to_gc(rb_objspace_t *objspace, rb_heap_t *heap)
 {
-    if (dont_gc || during_gc) {
-	if (!heap->freelist && !heap->free_pages) {
-	    if (!heap_increment(objspace, heap)) {
-		heap_set_increment(objspace, 1);
-                heap_increment(objspace, heap);
-            }
+    if (!heap->freelist && !heap->free_pages) {
+	if (!heap_increment(objspace, heap)) {
+	    heap_set_increment(objspace, 1);
+	    heap_increment(objspace, heap);
 	}
-	return FALSE;
     }
-    return TRUE;
 }
 
 static int
 ready_to_gc(rb_objspace_t *objspace)
 {
-    return heap_ready_to_gc(objspace, heap_eden);
+    if (dont_gc || during_gc || ruby_disable_gc) {
+	heap_ready_to_gc(objspace, heap_eden);
+	return FALSE;
+    }
+    else {
+	return TRUE;
+    }
 }
 
 static void
@@ -5792,7 +5794,7 @@ gc_start(rb_objspace_t *objspace, const https://github.com/ruby/ruby/blob/trunk/gc.c#L5794
 
     gc_enter(objspace, "gc_start");
 
-    if (ruby_gc_stress && !ruby_disable_gc_stress) {
+    if (ruby_gc_stress) {
 	int flag = FIXNUM_P(ruby_gc_stress) ? FIX2INT(ruby_gc_stress) : 0;
 
 	if ((flag & (1<<gc_stress_no_major)) == 0) {
@@ -6927,7 +6929,7 @@ atomic_sub_nounderflow(size_t *var, size https://github.com/ruby/ruby/blob/trunk/gc.c#L6929
 static void
 objspace_malloc_gc_stress(rb_objspace_t *objspace)
 {
-    if (ruby_gc_stress && !ruby_disable_gc_stress && ruby_native_thread_p()) {
+    if (ruby_gc_stress && ruby_native_thread_p()) {
 	garbage_collect_with_gvl(objspace, gc_stress_full_mark_after_malloc_p(), TRUE, TRUE, GPR_FLAG_STRESS | GPR_FLAG_MALLOC);
     }
 }
@@ -7738,7 +7740,7 @@ gc_prof_setup_new_record(rb_objspace_t * https://github.com/ruby/ruby/blob/trunk/gc.c#L7740
 	MEMZERO(record, gc_profile_record, 1);
 
 	/* setup before-GC parameter */
-	record->flags = reason | ((ruby_gc_stress && !ruby_disable_gc_stress) ? GPR_FLAG_STRESS : 0);
+	record->flags = reason | (ruby_gc_stress ? GPR_FLAG_STRESS : 0);
 #if MALLOC_ALLOCATED_SIZE
 	record->allocated_size = malloc_allocated_size;
 #endif
Index: signal.c
===================================================================
--- signal.c	(revision 47464)
+++ signal.c	(revision 47465)
@@ -817,7 +817,7 @@ ruby_abort(void) https://github.com/ruby/ruby/blob/trunk/signal.c#L817
 }
 
 static int segv_received = 0;
-extern int ruby_disable_gc_stress;
+extern int ruby_disable_gc;
 
 static RETSIGTYPE
 sigsegv(int sig SIGINFO_ARG)
@@ -833,7 +833,7 @@ sigsegv(int sig SIGINFO_ARG) https://github.com/ruby/ruby/blob/trunk/signal.c#L833
     CHECK_STACK_OVERFLOW();
 
     segv_received = 1;
-    ruby_disable_gc_stress = 1;
+    ruby_disable_gc = 1;
     rb_bug_context(SIGINFO_CTX, "Segmentation fault" MESSAGE_FAULT_ADDRESS);
 }
 #endif

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

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