smp: Use make-serial-population. Squash into 0dd59191.
authorMatt Birkholz <puck@birchwood-abbey.net>
Wed, 25 Feb 2015 15:14:30 +0000 (08:14 -0700)
committerMatt Birkholz <puck@birchwood-abbey.net>
Wed, 25 Feb 2015 15:14:30 +0000 (08:14 -0700)
src/runtime/geneqht.scm

index d3f83e683851752a835f0d65e2d496631cf75fba..2c645783dcf8ce33626c13c5a1928b8e6ca9a5fc 100644 (file)
@@ -97,38 +97,17 @@ USA.
                 modulus))
 
 (define (record-address-hash-table! table)
-  (with-thread-mutex-locked address-hash-tables-mutex
-    (lambda ()
-      (set! address-hash-tables (weak-cons table address-hash-tables))
-      unspecific)))
-
-;; Mark-address-hash-tables! might run during record-address-hash-
-;; table! (in the primitive GC daemon) and thus modify the address-
-;; hash-tables list (splicing out pairs whose weak cars have turned to
-;; #f).  The set! in record-address-hash-table! may then write the old
-;; value, before the splice, restoring the old pairs behind the new
-;; one.  Fortunately no harm is done.  The cars of the restored pairs
-;; are all #f and will be spliced out again eventually.
+  (add-to-population! address-hash-tables table))
 
 (define (mark-address-hash-tables!)
-  (let loop ((previous #f) (tables address-hash-tables))
-    (cond ((null? tables)
-          unspecific)
-         ((system-pair-car tables)
-          (set-table-needs-rehash?! (system-pair-car tables) #t)
-          (loop tables (system-pair-cdr tables)))
-         (else
-          (if previous
-              (system-pair-set-cdr! previous (system-pair-cdr tables))
-              (set! address-hash-tables (system-pair-cdr tables)))
-          (loop previous (system-pair-cdr tables))))))
+  (for-each-inhabitant address-hash-tables
+                      (lambda (table)
+                        (set-table-needs-rehash?! table #t))))
 
 (define address-hash-tables)
-(define address-hash-tables-mutex)
 
 (define (initialize-address-hashing!)
-  (set! address-hash-tables-mutex (make-thread-mutex))
-  (set! address-hash-tables '())
+  (set! address-hash-tables (make-serial-population))
   (add-primitive-gc-daemon! mark-address-hash-tables!))
 \f
 ;;;; Resizing