diff options
author | Pip Cet <pipcet@gmail.com> | 2020-08-21 14:56:06 +0200 |
---|---|---|
committer | Lars Ingebrigtsen <larsi@gnus.org> | 2020-08-21 14:56:06 +0200 |
commit | 9c62ffb08262c82b7e38e6eb5767f2087424aa47 (patch) | |
tree | ea2a18eabffded063b40af0623b2485b10ad44dc /src/thread.c | |
parent | 19ee08f1e8599ce0e0465f6ffbd4a76791d791b4 (diff) | |
download | emacs-9c62ffb08262c82b7e38e6eb5767f2087424aa47.tar.gz |
Fix lock failures in xg_select
* src/xgselect.c (release_select_lock, acquire_select_lock):
Introduce.
(xg_select): Use `acquire_select_lock', `release_select_lock'.
* src/thread.c (release_select_lock): Introduce for non-GLib builds.
(really_call_select): Call `release_select_lock'. Simplify by
ensuring acquisition of the lock always succeeds (bug#36609).
Diffstat (limited to 'src/thread.c')
-rw-r--r-- | src/thread.c | 8 |
1 files changed, 8 insertions, 0 deletions
diff --git a/src/thread.c b/src/thread.c index b638dd77f8b..b4d8a53cf68 100644 --- a/src/thread.c +++ b/src/thread.c @@ -28,6 +28,12 @@ along with GNU Emacs. If not, see <https://www.gnu.org/licenses/>. */ #include "pdumper.h" #include "keyboard.h" +#ifdef HAVE_GLIB +#include <xgselect.h> +#else +#define release_select_lock() do { } while (0) +#endif + union aligned_thread_state { struct thread_state s; @@ -586,6 +592,8 @@ really_call_select (void *arg) sa->result = (sa->func) (sa->max_fds, sa->rfds, sa->wfds, sa->efds, sa->timeout, sa->sigmask); + release_select_lock (); + block_interrupt_signal (&oldset); /* If we were interrupted by C-g while inside sa->func above, the signal handler could have called maybe_reacquire_global_lock, in |