Index: /trunk/ccl/hemlock/src/htext1.lisp
===================================================================
--- /trunk/ccl/hemlock/src/htext1.lisp	(revision 699)
+++ /trunk/ccl/hemlock/src/htext1.lisp	(revision 700)
@@ -162,4 +162,37 @@
   `(incf now-tick))
 
+;;; When passing the buffer between threads, cache these special variables'
+;;; values in the buffer, iff they apply to the buffer.
+(defun normalize-buffer-gap-info (buffer)
+  (if (and *open-line* (eq buffer (line-%buffer *open-line*)))
+    (setf (buffer-open-line buffer) *open-line*
+          (buffer-open-chars buffer) *open-chars*
+          (buffer-right-open-pos buffer) *right-open-pos*
+          (buffer-left-open-pos buffer) *left-open-pos*
+          (buffer-line-cache-length buffer) *line-cache-length*)
+    (setf (buffer-open-line buffer) nil
+          (buffer-open-chars buffer) nil
+          (buffer-right-open-pos buffer) 0
+          (buffer-left-open-pos buffer) 0
+          (buffer-line-cache-length buffer) 0)))
+
+;;; Caller has presumably bound these variables, if that matters
+(defun set-gap-info-from-buffer (buffer)
+  (setq *open-line* (buffer-open-line buffer)
+        *open-chars* (buffer-open-chars buffer)
+        *right-open-pos* (buffer-right-open-pos buffer)
+        *left-open-pos* (buffer-left-open-pos buffer)
+        *line-cache-length* (buffer-line-cache-length buffer)))
+
+;;; One way to bind those variables ...
+(defmacro with-buffer-gap-info ((buffer) &body body)
+  `(let* ((*open-line* (buffer-open-line ,buffer))
+          (*open-chars* (buffer-open-chars ,buffer))
+          (*right-open-pos* (buffer-right-open-pos ,buffer))
+          (*left-open-pos* (buffer-left-open-pos ,buffer))
+          (*line-cache-length* (buffer-line-cache-length ,buffer)))
+    ,@body))
+
+  
 (defun buffer-document-begin-editing (buffer)
   (when (bufferp buffer)
@@ -170,5 +203,7 @@
   (when (bufferp buffer)
     (let* ((document (buffer-document buffer)))
-      (when document (document-end-editing document)))))
+      (when document
+        (normalize-buffer-gap-info buffer)
+        (document-end-editing document)))))
 
 
