Mercurial > emacs
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 \ |
