Subject: bug#18438: 24.4.50; assertion failed in bidi.c

From: Ken Brown <[email-masked]>
Date: Thu, 16 Oct 2014 09:11:18 -0400

On 10/16/2014 3:27 AM, Eli Zaretskii wrote:
> Let's try to get a couple more full backtraces like this one, in case
> some pattern emerges that could give us some ideas.

I saw some things in Thread 7 (the Windows message queue thread), especially 
frame #14, which got me to look at the code for w32_wnd_proc in w32fns.c.  The 
code is about 1300 lines long, and includes several comments about why it is 
thread-safe.  Here are a few examples:

      Walking the frame list in this thread is safe (as long as
      writes of Lisp_Object slots are atomic, which they are on Windows).

      It is also safe to use functions that make GDI calls, such as
      w32_clear_rect, because these functions must obtain a DC handle
      from the frame struct using get_frame_dc which is thread-aware.

      The code below does something that one shouldn't do: it
      accesses the window object from a separate thread, while the
      main (a.k.a. "Lisp") thread runs and can legitimately delete
      and even GC it.  That is why we are extra careful...

I wonder if something in these 1300 lines is not thread-safe on Cygwin.  For 
example, I don't know if it's true on Cygwin that "writes of Lisp_Object slots 
are atomic".

> Ken, isn't it strange that these crashes are reported by so few
> people?  Or does it mean that only those people are using the 64-bit
> Cygwin-w32 build?  Maybe it would be worth asking on the Cygwin list,
> and getting us some usage statistics for this build, like how many are
> using it, and how much uptime each one can generally report?  Then, if
> only some of them get the crashes, we could try figuring out what are
> the differences between their systems.

That's a good idea.  I'll do it right now.  Thanks for the suggestion.

Ken