diff options
author | Eli Zaretskii <eliz@gnu.org> | 2016-12-30 11:36:07 +0200 |
---|---|---|
committer | Eli Zaretskii <eliz@gnu.org> | 2016-12-30 11:36:07 +0200 |
commit | 543532313a1d9570d6a74a7846b4e776a2282964 (patch) | |
tree | 72b0fc8e8fb161f04af620ef14a02836ad672791 /src/xgselect.c | |
parent | d9b126890dd729e18cb5522c38f33fc70daadd79 (diff) | |
download | emacs-543532313a1d9570d6a74a7846b4e776a2282964.tar.gz |
Attempt to fix crashes with threads in GTK builds
* src/xgselect.c (xg_select): Call pselect via thread_select, not
directly, to avoid running Lisp (via unblock_input) when more than
one thread could be running. (Bug#25247)
* src/process.c (wait_reading_process_output) [HAVE_GLIB]: Call
xg_select directly instead of through thread_select.
* src/xgselect.h (xg_select): Last 2 arguments are no longer
'const', for consistency with thread_select.
Diffstat (limited to 'src/xgselect.c')
-rw-r--r-- | src/xgselect.c | 11 |
1 files changed, 6 insertions, 5 deletions
diff --git a/src/xgselect.c b/src/xgselect.c index a9461a5df5a..c73ef7ce5f2 100644 --- a/src/xgselect.c +++ b/src/xgselect.c @@ -25,6 +25,7 @@ along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>. */ #include <glib.h> #include <errno.h> +#include "lisp.h" #include "blockinput.h" #include "systime.h" @@ -41,11 +42,11 @@ along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>. */ int xg_select (int fds_lim, fd_set *rfds, fd_set *wfds, fd_set *efds, - struct timespec const *timeout, sigset_t const *sigmask) + struct timespec *timeout, sigset_t *sigmask) { fd_set all_rfds, all_wfds; struct timespec tmo; - struct timespec const *tmop = timeout; + struct timespec *tmop = timeout; GMainContext *context; bool have_wfds = wfds != NULL; @@ -113,9 +114,9 @@ xg_select (int fds_lim, fd_set *rfds, fd_set *wfds, fd_set *efds, } fds_lim = max_fds + 1; - nfds = pselect (fds_lim, &all_rfds, have_wfds ? &all_wfds : NULL, - efds, tmop, sigmask); - + nfds = thread_select (pselect, fds_lim, + &all_rfds, have_wfds ? &all_wfds : NULL, efds, + tmop, sigmask); if (nfds < 0) retval = nfds; else if (nfds > 0) |