smp: without-interrupts: string.scm
authorMatt Birkholz <puck@birchwood-abbey.net>
Tue, 10 Mar 2015 23:23:21 +0000 (16:23 -0700)
committerMatt Birkholz <puck@birchwood-abbey.net>
Tue, 10 Mar 2015 23:23:21 +0000 (16:23 -0700)
README.txt
src/runtime/string.scm

index f753dac6d09d94831a35e081c220fb46f7990cc6..c47a78389a304dab1bc46291acf2d1f3e5d7a882 100644 (file)
@@ -1559,8 +1559,21 @@ The hits with accompanying analysis:
        files-to-delete element of the fixed-objects vector.
 
   string.scm:178:         (let ((mask (set-interrupt-enables! interrupt-mask/none)))
+       Caller: %string-head!
   string.scm:199:           (set-interrupt-enables! mask)
+       Caller: %string-head!
   string.scm:1612:  (without-interrupts
+       Caller: allocate-external-string
+
+       OK.  %string-head! is editing the heap, and must only avoid
+       the GC.  It edits the heap by hacking the string contents
+       before changing the string length (atomically).  Other
+       processors can scan the heap anytime and never see unformatted
+       bytes.
+
+       Allocate-external-string already uses a serialized gc-
+       finalizer.  This seems to be about dropping a new external
+       string.  Changed without-interrupts to without-interruption.
 
   thread.scm:42:;;; they are done, and they must do this without-interrupts.  While
   thread.scm:76:(define-integrable (without-interrupts thunk)
index 45afef4f902632c3bc41b785781e097f11413daf..721e31d73715cfa596af90ae216f0b8bfee5d0dd 100644 (file)
@@ -1609,7 +1609,7 @@ USA.
   (length #f read-only #t))
 
 (define (allocate-external-string n-bytes)
-  (without-interrupts
+  (without-interruption
    (lambda ()
      (add-to-gc-finalizer!
       external-strings