(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 ((param:exit-hook inferior-repl/exit)
- (param:suspend-hook inferior-repl/suspend))
- (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:suspend-hook inferior-repl/suspend))
- (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)))))))))
++ (parameterize ((param:exit-hook inferior-repl/exit)
++ (param:suspend-hook inferior-repl/suspend))
++ (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