On 30 December 2016 at 17:41, Eli Zaretskii wrote: Elias, I'd be grateful if you could repeat your thread-related tests > from 2 weeks ago with the latest master (both in "emacs -nw" and in a > GUI session), and see if any of those problems are back. > I did some tests. The C-g issue is still gone. As for the concurrency issues. I have been hammering this thing pretty hard, and no crashes so far. However, I have seen some strange issues. I've been trying to isolate the behaviour, but I don't have any more time to do so at the moment, so I'll just summarise where I am: *Issue 1:* *========* I open IELM in one window, and an empty buffer "z" in another, and type the following: (loop repeat 10 do (make-thread (lambda () (let ((n (random 10))) (with-current-buffer "z" (sleep-for n) (insert (format "Foo:%d\n" n))))))) Here, I'd expect to see the "z" buffer being updated at the corresponding times. I.e. the message "Foo:4" should be displayed after 4 seconds. This is not what I see. Instead the messages appear in batches (i.e. several rows appearing at the same time). *Issue 2:* *========* The following seems to be a problem with lexically bound lambda functions used in a thread. The following example illustrates the problem: (let ((x "test")) (make-thread (lambda () (with-current-buffer "z" (insert x))))) I would expect this to insert "test" into the buffer, but instead nothing happens. Removing the reference to the variable "x" in the lambda makes it work. Regards, Elias