* src/thread.c (acquire_global_lock): Don't try to take the global
lock if the same thread is already holding it. (Bug#29347)
static void
acquire_global_lock (struct thread_state *self)
{
- sys_mutex_lock (&global_lock);
+ /* If some Lisp was interrupted by C-g while inside pselect, the
+ signal handler could have called maybe_reacquire_global_lock, in
+ which case we are already holding the lock and shouldn't try
+ taking it again, or else we will hang forever. */
+ if (!(self && self->not_holding_lock))
+ sys_mutex_lock (&global_lock);
post_acquire_global_lock (self);
}