[macruby-changes] [3965] MacRuby/trunk

source_changes at macosforge.org source_changes at macosforge.org
Mon Apr 26 22:54:27 PDT 2010


Revision: 3965
          http://trac.macosforge.org/projects/ruby/changeset/3965
Author:   lsansonetti at apple.com
Date:     2010-04-26 22:54:26 -0700 (Mon, 26 Apr 2010)
Log Message:
-----------
more missing write barriers

Modified Paths:
--------------
    MacRuby/trunk/st.c
    MacRuby/trunk/vm.cpp

Modified: MacRuby/trunk/st.c
===================================================================
--- MacRuby/trunk/st.c	2010-04-27 03:07:18 UTC (rev 3964)
+++ MacRuby/trunk/st.c	2010-04-27 05:54:26 UTC (rev 3965)
@@ -356,7 +356,7 @@
 	head->back = entry;\
     }\
     else {\
-	table->head = entry;\
+	GC_WB(&table->head, entry);\
 	entry->fore = entry;\
 	entry->back = entry;\
     }\
@@ -458,7 +458,7 @@
     if ((ptr = table->head) != 0) {
 	do {
 	    hash_val = ptr->hash % new_num_bins;
-	    ptr->next = new_bins[hash_val];
+	    GC_WB(&ptr->next, new_bins[hash_val]);
 	    GC_WB(&new_bins[hash_val], ptr);
 	} while ((ptr = ptr->fore) != table->head);
     }
@@ -493,6 +493,8 @@
 	    entry = alloc(st_table_entry);
 	    assert(entry != NULL);
 	    *entry = *ptr;
+	    GC_WB(&entry->key, ptr->key);
+	    GC_WB(&entry->record, ptr->record);
 	    hash_val = entry->hash % num_bins;
 	    GC_WB(&entry->next, new_table->bins[hash_val]);
 	    GC_WB(&new_table->bins[hash_val], entry);
@@ -500,7 +502,8 @@
 	    prev = entry;
 	    *tail = entry;
 	    tail = &entry->fore;
-	} while ((ptr = ptr->fore) != old_table->head);
+	} while ((ptr = ptr->fore) != old_table->head && ptr != NULL);
+	GC_WB(&new_table->head, new_table->head);
 	entry = new_table->head;
 	entry->back = prev;
 	*tail = entry;

Modified: MacRuby/trunk/vm.cpp
===================================================================
--- MacRuby/trunk/vm.cpp	2010-04-27 03:07:18 UTC (rev 3964)
+++ MacRuby/trunk/vm.cpp	2010-04-27 05:54:26 UTC (rev 3965)
@@ -3395,8 +3395,8 @@
     b->arity.real = 1;
     b->flags = VM_BLOCK_PROC;
     b->imp = (IMP)rb_vm_block_curry;
-    b->dvars[0] = (VALUE *)proc;
-    b->dvars[1] = (VALUE *)passed;
+    GC_WB(&b->dvars[0], (VALUE *)proc);
+    GC_WB(&b->dvars[1], (VALUE *)passed);
     b->dvars[2] = (VALUE *)arity;
 
     return rb_proc_alloc_with_block(rb_cProc, b);
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.macosforge.org/pipermail/macruby-changes/attachments/20100426/743dc861/attachment.html>


More information about the macruby-changes mailing list