Subject: Re: bug#25247: 26.0.50; Concurrency crashes with XLib

From: Eli Zaretskii <[email-masked]>
Date: Sat, 31 Dec 2016 19:18:42 +0200

> From: Elias Mårtenson <[email-masked]>
> Date: Sun, 1 Jan 2017 00:24:59 +0800
> Cc: Tino Calancha <[email-masked]>, [email-masked], [email-masked]
> 
> After doing this, I will see "Foo:0" displayed in the "foo.txt" buffer, and the message "Wrote /home/elias/foo.txt"
> updated every second in the minibuffer.
> 
> While this is running (and note that the buffer content has not been updated and still contains just the "Foo:0"
> message), I switch to a terminal and cat the content of foo.txt. I can see that the file gets updated and saved
> every second, but the content of the buffer is only refreshed when I interact with Emacs (i.e. pressing a key).
> 
> This suggests to me that everything is actually running exactly the way one would expect from a green
> threads implementation, where a thread doing a sleep becomes runnable immediatenly after the timer runs
> out (as long as the system is otherwise idle at the time).
> 
> It seems as it's simply the buffer content that isn't refreshed properly.

I don't understand what you are saying here; it sounds like a
contradiction: the file on disk is updated (with presumably the next
Foo:%d strings), but the "buffer content isn't refreshed"?  Maybe by
"buffer content" you mean its display on the screen?  Because if the
file is updated, the buffer's content must also be updated, as that's
what gets written to the file.  Right?

The display on the screen will only change if Emacs enters redisplay.
If you see the file's contents change, but the display on the screen
doesn't reflect that, it means Emacs does not get a chance to perform
redisplay, because it doesn't become idle in any of the threads that
are active.  Which could be the case, since every time a running
thread is about to become idle, there's another thread ready to run.

> Interestingly enough, the minibuffer message does get updated.

Displaying minibuffer messages uses a separate entry to redisplay, and
that entry only displays the echo area, unless it needs to resize the
mini-window.