summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/alloc.c22
1 files changed, 16 insertions, 6 deletions
diff --git a/src/alloc.c b/src/alloc.c
index eb7acfd649f..192b974196f 100644
--- a/src/alloc.c
+++ b/src/alloc.c
@@ -130,17 +130,27 @@ static pthread_mutex_t alloc_mutex;
#define BLOCK_INPUT_ALLOC \
do \
{ \
- pthread_mutex_lock (&alloc_mutex); \
- if (pthread_self () == main_thread) \
- BLOCK_INPUT; \
+ if (!in_sighandler) \
+ { \
+ pthread_mutex_lock (&alloc_mutex); \
+ if (pthread_self () == main_thread) \
+ BLOCK_INPUT; \
+ else \
+ sigblock (sigmask (SIGIO)); \
+ } \
} \
while (0)
#define UNBLOCK_INPUT_ALLOC \
do \
{ \
- if (pthread_self () == main_thread) \
- UNBLOCK_INPUT; \
- pthread_mutex_unlock (&alloc_mutex); \
+ if (!in_sighandler) \
+ { \
+ pthread_mutex_unlock (&alloc_mutex); \
+ if (pthread_self () == main_thread) \
+ UNBLOCK_INPUT; \
+ else \
+ sigunblock (sigmask (SIGIO)); \
+ } \
} \
while (0)