]> git.eshelyaron.com Git - emacs.git/commitdiff
* alloc.c: Add comment about the reason for (UN)BLOCK_INPUT_ALLOC.
authorJan Djärv <jan.h.d@swipnet.se>
Tue, 7 Dec 2004 17:38:30 +0000 (17:38 +0000)
committerJan Djärv <jan.h.d@swipnet.se>
Tue, 7 Dec 2004 17:38:30 +0000 (17:38 +0000)
src/ChangeLog
src/alloc.c

index 999dbf373d58d6d856cf815a1aeb271043688acb..6b3a832e8408adc6ba34512e2ede5188eff676b4 100644 (file)
@@ -1,3 +1,7 @@
+2004-12-07  Jan Dj\e,Ad\e(Brv  <jan.h.d@swipnet.se>
+
+       * alloc.c: Add comment about the reason for (UN)BLOCK_INPUT_ALLOC.
+
 2004-12-07  Stefan  <monnier@iro.umontreal.ca>
 
        * eval.c (init_eval_once): Increase max_specpdl_size to 1000.
index 4f3a0d6f2c49309bc56c4cd805047bab245f6a4f..0ea389117bab4139aa7940be13ad4f8dafd8dcb8 100644 (file)
@@ -91,6 +91,23 @@ extern __malloc_size_t __malloc_extra_blocks;
 
 #if ! defined (SYSTEM_MALLOC) && defined (HAVE_GTK_AND_PTHREAD)
 
+/* When GTK uses the file chooser dialog, different backends can be loaded
+   dynamically.  One such a backend is the Gnome VFS backend that gets loaded
+   if you run Gnome.  That backend creates several threads and also allocates
+   memory with malloc.
+
+   If Emacs sets malloc hooks (! SYSTEM_MALLOC) and the emacs_blocked_*
+   functions below are called from malloc, there is a chance that one
+   of these threads preempts the Emacs main thread and the hook variables
+   end up in a inconsistent state.  So we have a mutex to prevent that (note
+   that the backend handles concurrent access to malloc within its own threads
+   but Emacs code running in the main thread is not included in that control).
+
+   When UNBLOCK_INPUT is called, revoke_input_signal may be called.  If this
+   happens in one of the backend threads we will have two threads that tries
+   to run Emacs code at once, and the code is not prepared for that.
+   To prevent that, we only call BLOCK/UNBLOCK from the main thread.  */
+
 static pthread_mutex_t alloc_mutex;
 pthread_t main_thread;