Geiser and Emacs freezes when trying to update code to Guile REPL with C-c C-c or C-x C-e
Geiser and Emacs freezes when trying to update code with C-c C-c or C-x C-e. Bug works with Guile REPL, started by local geiser instance (M-x run-geiser), not with remote geiser connect (M-x connect-to-guile)
- Create or open *.scm buffer with Scheme Guile mode
- Start repl with M-x run-geiser
- Insert to buffer some code, like:
(define (foo n)
(sleep 1)
(display n)
(newline)
(foo (+ n 1)))
(foo 0)
- Send code to REPL with C-c C-c or C-x C-e. The numbers will start to print.
- Change some code in foo procedure:
(define (foo n)
(sleep 1)
(display n)
(newline)
(foo (+ n 20)))
- Send modified code to REPL with C-c C-c or C-x C-e. And Emacs with Geiser freezes after that
Expected: The foo procedure updates after next recursive call and numbers will begin to print with an increase of 20.
Received: Geiser and Emacs freezes and after freezes the numbers prints with an increase of 1 (procedure before update)
Traceback:
Debugger entered--Lisp error: (quit)
accept-process-output(#<process Guile REPL> 3.0)
geiser-con--send-string/wait((t (:filter . comint-output-filter)
(:tq ((nil "\\(\n[^@()]+@([^)]*?)> \\|\n[^@()]+@([^)]*?)
\\[[0-9]+\\]> \\)" ((:id . 5) (:string . ",geiser-eval #f
(define (foo n)\n (sleep 1)\n (display n)\n (newline)\n (foo
(+ n 4)))\n ()") (:continuation . geiser-eval--set-sync-retort)
(:buffer . #<buffer test.scm>) (:connection . #1))
. geiser-con--process-completed-request)) #<process Guile REPL>
. #<buffer tq-temp-Guile REPL>) (:tq-filter lambda (p s)
(geiser-con--tq-filter (quote (((nil "\\(\n[^@()]+@([^)]*?)>
\\|\n[^@()]+@([^)]*?) \\[[0-9]+\\]> \\)"
... . geiser-con--process-completed-request)) #<process Guile
REPL> . #<buffer tq-temp-Guile REPL>)) s)) (:eot
. "\\(\n[^@()]+@([^)]*?)> \\|\n[^@()]+@([^)]*?) \\[[0-9]+\\]>
\\)") (:prompt . "[^@()]+@([^)]*?)> ") (:debug-prompt
. "[^@()]+@([^)]*?) \\[[0-9]+\\]> ") (:is-debugging) (:count . 5)
(:completed . #<hash-table eql 0/65 0x15b8781>)) ",geiser-eval #f
(define (foo n)\n (sleep 1)\n (display n)\n (newline)\n (foo
(+ n 4)))\n ()" geiser-eval--set-sync-retort nil nil)
geiser-eval--send/wait((:eval (:scm " (define (foo n)\n (sleep
1)\n (display n)\n (newline)\n (foo (+ n 4)))\n")))
geiser-debug--send-region(nil 1 73 nil nil nil)
geiser-eval-region(1 73 nil t)
geiser-eval-definition(nil)
funcall-interactively(geiser-eval-definition nil)
call-interactively(geiser-eval-definition nil nil)
command-execute(geiser-eval-definition)
Versions:
- Geiser: geiser-20200419.2111
- Emacs: GNU Emacs 26.3 (build 1, x86_64-pc-linux-gnu, GTK+ Version 3.24.14)
Edited by jao