aboutsummaryrefslogtreecommitdiffstats
path: root/src/thread.c
diff options
context:
space:
mode:
authorPip Cet2020-08-21 14:56:06 +0200
committerLars Ingebrigtsen2020-08-21 14:56:06 +0200
commit9c62ffb08262c82b7e38e6eb5767f2087424aa47 (patch)
treeea2a18eabffded063b40af0623b2485b10ad44dc /src/thread.c
parent19ee08f1e8599ce0e0465f6ffbd4a76791d791b4 (diff)
downloademacs-9c62ffb08262c82b7e38e6eb5767f2087424aa47.tar.gz
emacs-9c62ffb08262c82b7e38e6eb5767f2087424aa47.zip
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.c8
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/>. */
28#include "pdumper.h" 28#include "pdumper.h"
29#include "keyboard.h" 29#include "keyboard.h"
30 30
31#ifdef HAVE_GLIB
32#include <xgselect.h>
33#else
34#define release_select_lock() do { } while (0)
35#endif
36
31union aligned_thread_state 37union aligned_thread_state
32{ 38{
33 struct thread_state s; 39 struct thread_state s;
@@ -586,6 +592,8 @@ really_call_select (void *arg)
586 sa->result = (sa->func) (sa->max_fds, sa->rfds, sa->wfds, sa->efds, 592 sa->result = (sa->func) (sa->max_fds, sa->rfds, sa->wfds, sa->efds,
587 sa->timeout, sa->sigmask); 593 sa->timeout, sa->sigmask);
588 594
595 release_select_lock ();
596
589 block_interrupt_signal (&oldset); 597 block_interrupt_signal (&oldset);
590 /* If we were interrupted by C-g while inside sa->func above, the 598 /* If we were interrupted by C-g while inside sa->func above, the
591 signal handler could have called maybe_reacquire_global_lock, in 599 signal handler could have called maybe_reacquire_global_lock, in