Update testcase
[eow] / web.lisp
index 68870b9571e2556f8d32e0a7cf48a2817d0ed1bd..c7ead803bf9f3a808610b80a10d0a286ed2447db 100644 (file)
--- a/web.lisp
+++ b/web.lisp
        (empire-log:info "~a: Killing update thread ~a." *empire-session* (update-thread *empire-session*))
        (sb-thread:terminate-thread (update-thread *empire-session*)))
     (setf (update-thread *empire-session*) sb-thread:*current-thread*)
-    (let ((next-update (locked-queue:dequeue (update-queue *empire-session*))))
+    (let ((next-updates (locked-queue:dequeue-all (update-queue *empire-session*))))
+      ; There's a race here. The next update thread might kill this one before
+      ; sending the reply.
       (setf (update-thread *empire-session*) nil)
-      next-update)))
+      (nconc next-updates (list (parenscript:ps* '(next))))
+      (apply #'concatenate 'string next-updates))))
 
 (defmethod send ((s session) string)
   "Push a javascript update fragment to the client."