I have been experimenting with the following code, run from an IELM buffer:

    (make-thread (lambda ()
        (sit-for 5)
        (with-current-buffer "z"
            (insert "foo"))))

I then keep the "z" bufer open in a different window so that I can see what is going on.

If I type this command and then wait 5 seconds, the buffer get updated just as I expect.

If I then type the same command again, Emacs crashes after 5 seconds. Sometimes I have to try more than twice to get Emacs to crash, but it will inevitably happen.

Also, when the crash doesn't happen, and I keep pressing RET after running the above form, the insert will happen after much less than 5 seconds. Sometimes it happens almost immediately. It's like sit-for actually doesn't wait the correct number of seconds, but rather will just finish as soon as control is returned to the thread.

Regards,
Elias