Mercurial > emacs
diff src/gtkutil.c @ 58818:f8cddae7d959
* gtkutil.c: Include signal.h and syssignal.h.
(xg_get_file_name): Block and unblock __SIGRTMIN if defined.
* alloc.c: If HAVE_GTK_AND_PTHREAD, include pthread.h,
new variables main_thread and alloc_mutex,
define (UN)BLOCK_INPUT_ALLOC to use alloc_mutex to protect
emacs_blocked_* calls and only do (UN)BLOCK_INPUT in the main thread.
If not HAVE_GTK_AND_PTHREAD, (UN)BLOCK_INPUT_ALLOC is the same as
(UN)BLOCK_INPUT.
(emacs_blocked_free, emacs_blocked_malloc)
(emacs_blocked_realloc): Use (UN)BLOCK_INPUT_ALLOC.
(uninterrupt_malloc): Initialize main_thread and alloc_mutex.
(reset_malloc_hooks): New function.
* lisp.h: Declare reset_malloc_hooks.
* emacs.c (Fdump_emacs): Call reset_malloc_hooks.
* keyboard.c: Conditionally include pthread.h
(handle_async_inpu, input_available_signalt): If not in the main
thread, block signal, send signal to main thread and return.
author | Jan Djärv <jan.h.d@swipnet.se> |
---|---|
date | Tue, 07 Dec 2004 08:25:43 +0000 |
parents | 65f1b18b7f66 |
children | 6a0b8f23858b f2ebccfa87d4 |
line wrap: on
line diff
--- a/src/gtkutil.c Tue Dec 07 08:09:10 2004 +0000 +++ b/src/gtkutil.c Tue Dec 07 08:25:43 2004 +0000 @@ -23,10 +23,12 @@ #ifdef USE_GTK #include <string.h> +#include <signal.h> #include <stdio.h> #include "lisp.h" #include "xterm.h" #include "blockinput.h" +#include "syssignal.h" #include "window.h" #include "atimer.h" #include "gtkutil.h" @@ -1311,6 +1313,13 @@ int filesel_done = 0; xg_get_file_func func; +#if defined (HAVE_GTK_AND_PTHREAD) && defined (__SIGRTMIN) + /* I really don't know why this is needed, but without this the GLIBC add on + library linuxthreads hangs when the Gnome file chooser backend creates + threads. */ + sigblock (sigmask (__SIGRTMIN)); +#endif /* HAVE_GTK_AND_PTHREAD */ + #ifdef HAVE_GTK_FILE_BOTH extern int x_use_old_gtk_file_dialog; @@ -1358,6 +1367,10 @@ gtk_main_iteration (); } +#if defined (HAVE_GTK_AND_PTHREAD) && defined (__SIGRTMIN) + sigunblock (sigmask (__SIGRTMIN)); +#endif + if (filesel_done == GTK_RESPONSE_OK) fn = (*func) (w);