From: Matt Birkholz Date: Fri, 16 Mar 2018 03:02:11 +0000 (-0700) Subject: edwin/intmod: Hack Edwin data structures ONLY in editor-thread. X-Git-Tag: mit-scheme-pucked-x11-0.2.2~42 X-Git-Url: https://birchwood-abbey.net/git?a=commitdiff_plain;h=ad76d81127797f4b61aa79c123948bc0ebf41256;p=mit-scheme.git edwin/intmod: Hack Edwin data structures ONLY in editor-thread. --- diff --git a/src/edwin/intmod.scm b/src/edwin/intmod.scm index f7ad3947f..eb951db56 100644 --- a/src/edwin/intmod.scm +++ b/src/edwin/intmod.scm @@ -114,32 +114,39 @@ evaluated in the specified inferior REPL buffer." (buffer-put! buffer 'MAJOR-MODE-LOCKED #t)) (if (environment? environment) (local-set-variable! scheme-environment environment buffer)) - (create-thread editor-thread-root-continuation - (lambda () - (let ((port - (make-interface-port buffer - (let ((thread (current-thread))) - (detach-thread thread) - thread)))) - (attach-buffer-interface-port! buffer port) - (parameterize* (list (cons param:%exit-hook inferior-repl/%exit) - (cons param:quit-hook inferior-repl/quit)) - (lambda () - (dynamic-wind - (lambda () unspecific) - (lambda () - (repl/start (make-repl #f - port - environment - #f - `((ERROR-DECISION ,error-decision)) - user-initial-prompt) - (make-init-message message))) - (lambda () - (signal-thread-event editor-thread - (lambda () - (unwind-inferior-repl-buffer buffer))))))))) - buffer)) + (let ((return (make-thread-queue 1)) + (proceed (make-thread-queue 1))) + (create-thread editor-thread-root-continuation + (lambda () + (let ((port + (make-interface-port buffer + (let ((thread (current-thread))) + (detach-thread thread) + thread)))) + (thread-queue/queue! return port) ;pass port to editor-thread + (thread-queue/dequeue! proceed) ;wait for port to be attached + (parameterize* (list (cons param:%exit-hook inferior-repl/%exit) + (cons param:quit-hook inferior-repl/quit)) + (lambda () + (dynamic-wind + (lambda () unspecific) + (lambda () + (repl/start + (make-repl #f + port + environment + #f + `((ERROR-DECISION ,error-decision)) + user-initial-prompt) + (make-init-message message))) + (lambda () + (signal-thread-event editor-thread + (lambda () + (unwind-inferior-repl-buffer buffer))))))))) + buffer) + (let ((port (thread-queue/dequeue! return))) + (attach-buffer-interface-port! buffer port) + (thread-queue/queue! proceed 'ready)))) (define (make-init-message message) (if message