branch: elpa/inf-clojure
commit e1a93c73a24dd35914642725d351010a0909aa41
Author: Andrea Richiardi <a.richiardi.w...@gmail.com>
Commit: Bozhidar Batsov <bozhidar.bat...@gmail.com>

    Add lock around REPL type detection
    
    The patch solves, maybe not in the best way, a couple of problems
    detected when emacs triggers multiple process output filters. See
    
http://blog.jorgenschaefer.de/2014/05/race-conditions-in-emacs-process-filter.html
---
 inf-clojure.el | 16 +++++++++++-----
 1 file changed, 11 insertions(+), 5 deletions(-)

diff --git a/inf-clojure.el b/inf-clojure.el
index fe6aa7d..c8aa815 100644
--- a/inf-clojure.el
+++ b/inf-clojure.el
@@ -195,17 +195,23 @@ often connecting to a remote REPL process."
 Its root binding is nil and it can be further customized using
 either `setq-local` or an entry in `.dir-locals.el`." )
 
-(defun inf-clojure--detect-type (proc)
+(defvar inf-clojure--repl-type-lock nil
+  "Global lock for protecting against proc filter race conditions.
+See 
http://blog.jorgenschaefer.de/2014/05/race-conditions-in-emacs-process-filter.html";)
+
+(defun inf-clojure--detect-repl-type (proc)
   "Identifies the current REPL type for PROC."
-  (cond
-   ((inf-clojure--lumo-p proc) 'lumo)
-   (t 'clojure)))
+  (when (not inf-clojure--repl-type-lock)
+    (let ((inf-clojure--repl-type-lock t))
+      (cond
+       ((inf-clojure--lumo-p proc) 'lumo)
+       (t 'clojure)))))
 
 (defun inf-clojure--set-repl-type (proc)
   "Set the REPL type if has not already been set.
 It requires a REPL PROC for inspecting the correct type."
   (if (not inf-clojure-repl-type)
-      (setq inf-clojure-repl-type (inf-clojure--detect-type proc))
+      (setq inf-clojure-repl-type (inf-clojure--detect-repl-type proc))
     inf-clojure-repl-type))
 
 (defun inf-clojure--send-string (proc string)

Reply via email to