diff options
| author | Pip Cet | 2020-08-21 14:56:06 +0200 |
|---|---|---|
| committer | Lars Ingebrigtsen | 2020-08-21 14:56:06 +0200 |
| commit | 9c62ffb08262c82b7e38e6eb5767f2087424aa47 (patch) | |
| tree | ea2a18eabffded063b40af0623b2485b10ad44dc /src/thread.c | |
| parent | 19ee08f1e8599ce0e0465f6ffbd4a76791d791b4 (diff) | |
| download | emacs-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.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/>. */ | |||
| 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 | |||
| 31 | union aligned_thread_state | 37 | union 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 |