unofficial mirror of bug-gnu-emacs@gnu.org 
 help / color / mirror / code / Atom feed
From: Eli Zaretskii <eliz@gnu.org>
To: Ken Brown <kbrown@cornell.edu>
Cc: 18438@debbugs.gnu.org, aidalgol@amuri.net
Subject: bug#18438: 24.4.50; assertion failed in bidi.c
Date: Sun, 19 Oct 2014 17:39:51 +0300	[thread overview]
Message-ID: <83mw8scedk.fsf@gnu.org> (raw)
In-Reply-To: <543FC3F6.9010101@cornell.edu>

> Date: Thu, 16 Oct 2014 09:11:18 -0400
> From: Ken Brown <kbrown@cornell.edu>
> CC: 18438@debbugs.gnu.org
> 
> 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".

I couldn't find even one "write to Lisp_Object slot" in that function,
so I don't see how this would matter.

Besides, the code that crashes has no relation to any Lisp objects: we
are walking the buffer text there.  So even if w32_wnd_proc does do
something that's "verboten" with Lisp objects, I still don't see how
that could change the result of a comparison-and-jump pair of
instructions in mid-flight.

The rest of what the comments in w32_wnd_proc say is correct, but
again unrelated, for the same reasons.  In fact, I cannot explain to
myself at all how _any_ code that is not thread-safe could cause such
a phenomenon.  I can think of no other explanations for what we see
except some code that somehow modifies the CPU flags between the
compare instruction and the following jump instruction.  Otherwise,
how can it be that the value is valid, but Emacs still aborts?  Any
other ideas?





  parent reply	other threads:[~2014-10-19 14:39 UTC|newest]

Thread overview: 96+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-09-09 21:41 bug#18438: 24.4.50; assertion failed in bidi.c aidalgol
2014-09-10  0:16 ` Stefan Monnier
2014-09-10 18:55   ` Aidan Gauland
2014-09-10 19:09     ` Eli Zaretskii
2014-09-11  4:31       ` aidalgol
2014-09-11 13:18         ` Ken Brown
2014-09-12  1:51           ` aidalgol
2014-09-12  1:55       ` aidalgol
2014-09-12  6:00         ` Eli Zaretskii
2014-09-12  7:46           ` Eli Zaretskii
2014-09-16  1:04             ` aidalgol
2014-09-16  2:47               ` Eli Zaretskii
2014-09-16  2:59                 ` aidalgol
2014-09-16 14:33                   ` Eli Zaretskii
2014-09-16 22:42                     ` aidalgol
2014-09-17  5:07                       ` Eli Zaretskii
2014-09-18  4:55                         ` aidalgol
2014-09-18  4:59                         ` aidalgol
2014-09-18 14:42                           ` Eli Zaretskii
2014-09-21 22:30                             ` Ken Brown
2014-09-24  5:07                               ` aidalgol
2014-09-24 14:06                                 ` Ken Brown
2014-09-24 15:01                                   ` Eli Zaretskii
2014-09-24 16:40                                     ` Ken Brown
2014-09-24 19:49                                       ` Eli Zaretskii
2014-09-28 23:03                                   ` aidalgol
2014-09-10 13:14 ` Ken Brown
2014-09-29  0:56 ` aidalgol
2014-09-29  6:23   ` Eli Zaretskii
2014-09-29 15:50     ` Ken Brown
2014-09-29 17:00       ` Eli Zaretskii
2014-09-29 22:28         ` aidalgol
2014-09-30 15:24           ` Eli Zaretskii
2014-09-30 16:09             ` Ken Brown
2014-09-30 16:27               ` Eli Zaretskii
2014-09-30 23:06                 ` aidalgol
2014-10-01  2:39                   ` Eli Zaretskii
2014-10-01  2:58                     ` aidalgol
2014-10-01 14:42                       ` Eli Zaretskii
2014-10-01 21:56                         ` aidalgol
2014-10-01  2:40                   ` Ken Brown
2014-10-08 22:20             ` aidalgol
2014-10-09  7:29               ` Eli Zaretskii
2014-10-10  2:21                 ` aidalgol
2014-10-10  7:19                   ` Eli Zaretskii
2014-10-10  7:26                     ` Eli Zaretskii
2014-10-10 13:54                     ` Ken Brown
2014-10-10 15:12                       ` Eli Zaretskii
2014-10-10 17:14                         ` Ken Brown
2014-10-11  1:57                         ` Ken Brown
2014-10-11  7:11                           ` Eli Zaretskii
2014-10-11 13:58                             ` Ken Brown
2014-10-11 14:24                               ` Eli Zaretskii
2014-10-11 16:33                                 ` Ken Brown
2014-10-11 16:52                                   ` Eli Zaretskii
2014-10-11 17:17                                     ` Ken Brown
2014-10-15  0:58                     ` aidalgol
2014-10-15  5:13                       ` Eli Zaretskii
2014-10-15 19:29                         ` aidalgol
2014-10-16  7:27                           ` Eli Zaretskii
2014-10-16 13:11                             ` Ken Brown
2014-10-16 13:38                               ` Eli Zaretskii
2014-10-19 14:39                               ` Eli Zaretskii [this message]
2014-10-19 15:37                                 ` Ken Brown
2014-10-19 18:10                                   ` Eli Zaretskii
2014-10-19 19:49                                   ` aidalgol
2014-10-19 20:20                                 ` aidalgol
2014-10-20 15:46                                   ` Eli Zaretskii
2014-10-20 16:51                                     ` Eli Zaretskii
2014-10-20 19:35                                       ` Ivan Shmakov
2014-10-20 19:39                                         ` Eli Zaretskii
2014-10-20 20:02                                           ` Ivan Shmakov
2014-10-20 20:59                                       ` Ken Brown
2014-10-21 15:42                                         ` Eli Zaretskii
2014-10-21 16:18                                           ` Ken Brown
2014-10-21 19:38                                         ` aidalgol
2014-10-21 21:12                                           ` Ken Brown
2014-10-21 21:58                                             ` aidalgol
2014-10-21 22:21                                               ` Ken Brown
2014-10-21 22:38                                                 ` aidalgol
2014-10-22  4:16 ` aidalgol
2014-10-22 15:24   ` Eli Zaretskii
2014-10-22 17:16   ` Eli Zaretskii
2014-10-22 20:39     ` Ken Brown
2014-10-23 20:38       ` aidalgol
2014-10-23 21:54       ` aidalgol
2014-10-24  6:50         ` Eli Zaretskii
2014-10-24 19:18           ` Ken Brown
2014-10-24 21:19             ` Ken Brown
2014-10-29  4:30               ` aidalgol
2014-10-29 12:15                 ` Ken Brown
2014-10-29 14:37                   ` Eli Zaretskii
2015-12-26 15:37                   ` bug#17817: " Lars Ingebrigtsen
2015-12-26 15:43                     ` Ken Brown
2014-10-29 14:17                 ` Eli Zaretskii
2014-10-23  4:15     ` aidalgol

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

  List information: https://www.gnu.org/software/emacs/

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=83mw8scedk.fsf@gnu.org \
    --to=eliz@gnu.org \
    --cc=18438@debbugs.gnu.org \
    --cc=aidalgol@amuri.net \
    --cc=kbrown@cornell.edu \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
Code repositories for project(s) associated with this public inbox

	https://git.savannah.gnu.org/cgit/emacs.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).