On 30 December 2016 at 17:41, Eli Zaretskii <eliz@gnu.org> 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