all messages for Emacs-related lists mirrored at yhetil.org
 help / color / mirror / code / Atom feed
From: Eli Zaretskii <eliz@gnu.org>
To: "Stefan Kangas" <stefankangas@gmail.com>,
	"Alan Third" <alan@idiocy.org>,
	"Gerd Möllmann" <gerd.moellmann@gmail.com>
Cc: 75275@debbugs.gnu.org
Subject: bug#75275: 30.0.92; `make-thread` bug on macOS 15.2
Date: Thu, 02 Jan 2025 09:13:50 +0200	[thread overview]
Message-ID: <86bjwplmc1.fsf@gnu.org> (raw)
In-Reply-To: <CADwFkm=QcK4UYVv0MYMfJBgABjTTpPYC5Frf=9UuMXmsxptEUw@mail.gmail.com> (message from Stefan Kangas on Wed, 1 Jan 2025 22:57:38 -0600)

> From: Stefan Kangas <stefankangas@gmail.com>
> Date: Wed, 1 Jan 2025 22:57:38 -0600
> 
> I have run into a bug with make-thread on macOS 15.2, running on an M2.
> 
> I can reproduce the issue consistently both on emacs-30 and master by
> evaluating this in emacs -Q:
> 
>     (make-thread (lambda () (sleep-for 1)) "bug")
> 
> This leads to Emacs freezing up completely within a fraction of a
> second.  I have time to move point once or maybe twice before it gets
> non-responsive, let's say within a few tenths of a second.

The above works as expected on MS-Windows and on GNU/Linux: after
about 1 sec the new thread exits, and Emacs works normally.
list-threads shows a single main thread running at that time.

> When I kill the process in the lldb window with Ctrl+C, I can get the
> following (this is on emacs-30):
> 
> [...]
> 2025-01-02 05:47:20.778199+0100 emacs[78593:1366649] [General]
> nextEventMatchingMask should only be called from the Main Thread!
> Process 78593 stopped
> * thread #1, queue = 'com.apple.main-thread', stop reason = signal SIGSTOP
>     frame #0: 0x000000018e12dbbc libsystem_kernel.dylib`__psynch_mutexwait + 8
> libsystem_kernel.dylib`:
> ->  0x18e12dbbc <+8>:  b.lo   0x18e12dbdc               ; <+40>
>     0x18e12dbc0 <+12>: pacibsp
>     0x18e12dbc4 <+16>: stp    x29, x30, [sp, #-0x10]!
>     0x18e12dbc8 <+20>: mov    x29, sp
> Target 0: (emacs) stopped.
> (lldb) bt all
> * thread #1, queue = 'com.apple.main-thread', stop reason = signal SIGSTOP
>   * frame #0: 0x000000018e12dbbc libsystem_kernel.dylib`__psynch_mutexwait + 8
>     frame #1: 0x000000018e1693f8
> libsystem_pthread.dylib`_pthread_mutex_firstfit_lock_wait + 84
>     frame #2: 0x000000018e166dbc
> libsystem_pthread.dylib`_pthread_mutex_firstfit_lock_slow + 220
>     frame #3: 0x00000001003bfb94
> emacs`sys_mutex_lock(mutex=0x0000000100b7bd30) at systhread.c:140:15
>     frame #4: 0x00000001003bcef8
> emacs`acquire_global_lock(self=0x0000000100b074d0) at thread.c:160:3
>     frame #5: 0x00000001003bdce0

This is the main thread waiting for the global lock, which is
expected.

>   thread #7, name = 'bug'
>     frame #0: 0x000000018de3a2b0
> dyld`dyld3::MachOLoaded::findClosestSymbol(unsigned long long, char
> const**, unsigned long long*) const + 488
>     frame #1: 0x000000018de1b13c dyld`dyld4::APIs::dladdr(void const*,
> dl_info*) + 236
>     frame #2: 0x000000018e012f00 libsystem_c.dylib`backtrace_symbols + 144
>     frame #3: 0x000000018f4998c0 Foundation`-[_NSCallStackArray
> descriptionWithLocale:indent:] + 144
>     frame #4: 0x000000018f3e8c10 Foundation`_NS_os_log_callback + 276
>     frame #5: 0x000000018debee60
> libsystem_trace.dylib`_os_log_fmt_flatten_NSCF + 64
>     frame #6: 0x000000018dec5830
> libsystem_trace.dylib`_os_log_fmt_flatten_object_impl + 372
>     frame #7: 0x000000018debc9c8
> libsystem_trace.dylib`_os_log_impl_flatten_and_send + 2144
>     frame #8: 0x000000018debc150 libsystem_trace.dylib`_os_log + 168
>     frame #9: 0x000000018debc0a0 libsystem_trace.dylib`_os_log_impl + 28
>     frame #10: 0x000000019209151c AppKit`-[NSApplication reportException:] + 624
>     frame #11: 0x0000000191db0118 AppKit`-[NSApplication run] + 664
>     frame #12: 0x0000000100403fec emacs`-[EmacsApp
> run](self=0x0000000156610fe0, _cmd="run") at nsterm.m:5938:7
>     frame #13: 0x00000001004024b0 emacs`ns_select_1(nfds=0,
> readfds=0x00000001708c26bc, writefds=0x00000001708c263c,
> exceptfds=0x0000000000000000, timeout=0x00000001708c2610,
> sigmask=0x0000000000000000, run_loop_only=NO) at nsterm.m:4954:3
>     frame #14: 0x000000010040202c emacs`ns_select(nfds=0,
> readfds=0x00000001708c26bc, writefds=0x00000001708c263c,
> exceptfds=0x0000000000000000, timeout=0x00000001708c2610,
> sigmask=0x0000000000000000) at nsterm.m:5006:10
>     frame #15: 0x000000010036930c
> emacs`wait_reading_process_output(time_limit=1, nsecs=0, read_kbd=0,
> do_display=false, wait_for_cell=(i = 0x0000000000000000),
> wait_proc=0x0000000000000000, just_wait_proc=0) at process.c:5753:18
>     frame #16: 0x000000010000b400 emacs`Fsleep_for(seconds=(i =
> 0x0000000000000006), milliseconds=(i = 0x0000000000000000)) at
> dispnew.c:6248:2

This is the new Lisp thread started by make-thread, but it is
somewhere in the bowels of macOS.  Is this what you see each time you
kill Emacs after it hangs?

Can someone describe how sleep-for works on macOS, i.e. what is
supposed to happen after ns_select_1 calls -[EmacsApp run], whatever
that is?  It sounds like something in that machinery conflicts with
how Lisp threads are implemented.

From the backtrace of the new Lisp thread, it looks like it finished
sleeping for 1 sec and then it proceeds to calling [NSApp run] -- is
this correct behavior for a non-main thread?  E.g., does that try to
run the main thread (which is parked inside sys_mutex_lock, waiting
for the global lock to become free)?





  parent reply	other threads:[~2025-01-02  7:13 UTC|newest]

Thread overview: 45+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2025-01-02  4:57 bug#75275: 30.0.92; `make-thread` bug on macOS 15.2 Stefan Kangas
2025-01-02  5:46 ` Gerd Möllmann
2025-01-02  5:55   ` Gerd Möllmann
2025-01-02  6:47   ` Stefan Kangas
2025-01-02  7:12     ` Gerd Möllmann
2025-01-02 14:35       ` Stefan Kangas
2025-01-02 14:38         ` Gerd Möllmann
2025-01-02 14:45           ` Gerd Möllmann
2025-01-02 15:19             ` Stefan Kangas
2025-01-02 16:06               ` Alan Third
2025-01-02 16:47                 ` Alan Third
2025-01-02 16:58                 ` Eli Zaretskii
2025-01-02 17:09                   ` Gerd Möllmann
2025-01-02 17:22                     ` Eli Zaretskii
2025-01-02 17:25                       ` Gerd Möllmann
2025-01-02 17:42                         ` Alan Third
2025-01-02 17:48                           ` Gerd Möllmann
2025-01-02 17:37                       ` Alan Third
2025-01-02 17:46                         ` Gerd Möllmann
2025-01-02 17:52                           ` Gerd Möllmann
2025-01-02 19:26                             ` Alan Third
2025-01-02 19:59                               ` Gerd Möllmann
2025-01-02 16:46               ` Eli Zaretskii
2025-01-02  7:53     ` Eli Zaretskii
2025-01-02  7:58       ` Stefan Kangas
2025-01-02  7:13 ` Eli Zaretskii [this message]
2025-01-02  7:30   ` Gerd Möllmann
2025-01-02  8:28     ` Eli Zaretskii
2025-01-02  8:33       ` Gerd Möllmann
2025-01-02  8:41         ` Gerd Möllmann
2025-01-02  8:55           ` Eli Zaretskii
2025-01-02 10:04             ` Gerd Möllmann
2025-01-02 11:03               ` Alan Third
2025-01-02 13:05                 ` Gerd Möllmann
2025-01-02 13:53                   ` Alan Third
2025-01-02 14:03                     ` Gerd Möllmann
2025-01-02 14:17                       ` Alan Third
2025-01-02 15:31                 ` Eli Zaretskii
2025-01-02 15:37                   ` Gerd Möllmann
2025-01-02 15:55                     ` Alan Third
2025-01-02 16:08                       ` Gerd Möllmann
2025-01-02  8:51         ` Gerd Möllmann
2025-01-02  7:31   ` Stefan Kangas
2025-01-02  8:31     ` Eli Zaretskii
2025-01-02 10:31     ` Michael Albinus via Bug reports for GNU Emacs, the Swiss army knife of text editors

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

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

  git send-email \
    --in-reply-to=86bjwplmc1.fsf@gnu.org \
    --to=eliz@gnu.org \
    --cc=75275@debbugs.gnu.org \
    --cc=alan@idiocy.org \
    --cc=gerd.moellmann@gmail.com \
    --cc=stefankangas@gmail.com \
    /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 external index

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

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.