comparison src/alloc.c @ 58831:408c5135b0a2

* alloc.c: Add comment about the reason for (UN)BLOCK_INPUT_ALLOC.
author Jan Dj?rv <jan.h.d@swipnet.se>
date Tue, 07 Dec 2004 17:38:30 +0000
parents f8cddae7d959
children 59945307b86b 5e454dd0d649 f2ebccfa87d4
comparison
equal deleted inserted replaced
58830:27baac8434ba 58831:408c5135b0a2
88 extern __malloc_size_t __malloc_extra_blocks; 88 extern __malloc_size_t __malloc_extra_blocks;
89 89
90 #endif /* not DOUG_LEA_MALLOC */ 90 #endif /* not DOUG_LEA_MALLOC */
91 91
92 #if ! defined (SYSTEM_MALLOC) && defined (HAVE_GTK_AND_PTHREAD) 92 #if ! defined (SYSTEM_MALLOC) && defined (HAVE_GTK_AND_PTHREAD)
93
94 /* When GTK uses the file chooser dialog, different backends can be loaded
95 dynamically. One such a backend is the Gnome VFS backend that gets loaded
96 if you run Gnome. That backend creates several threads and also allocates
97 memory with malloc.
98
99 If Emacs sets malloc hooks (! SYSTEM_MALLOC) and the emacs_blocked_*
100 functions below are called from malloc, there is a chance that one
101 of these threads preempts the Emacs main thread and the hook variables
102 end up in a inconsistent state. So we have a mutex to prevent that (note
103 that the backend handles concurrent access to malloc within its own threads
104 but Emacs code running in the main thread is not included in that control).
105
106 When UNBLOCK_INPUT is called, revoke_input_signal may be called. If this
107 happens in one of the backend threads we will have two threads that tries
108 to run Emacs code at once, and the code is not prepared for that.
109 To prevent that, we only call BLOCK/UNBLOCK from the main thread. */
93 110
94 static pthread_mutex_t alloc_mutex; 111 static pthread_mutex_t alloc_mutex;
95 pthread_t main_thread; 112 pthread_t main_thread;
96 113
97 #define BLOCK_INPUT_ALLOC \ 114 #define BLOCK_INPUT_ALLOC \