From 6d0f60577a9af65ab32a026483cb6c7189aaf842 Mon Sep 17 00:00:00 2001 From: Simon Rowe Date: Thu, 7 Jun 2012 18:22:20 +0100 Subject: xenstore: block signals in watch wakeup thread The thread created to wakeup watchers is not intended to handle signals (and a later patch will reduce it's stack size which makes it unsuitable for doing so). Signed-off-by: Simon Rowe Acked-by: Ian Jackson Committed-by: Ian Jackson --- tools/xenstore/xs.c | 7 +++++++ 1 file changed, 7 insertions(+) (limited to 'tools/xenstore') diff --git a/tools/xenstore/xs.c b/tools/xenstore/xs.c index f141066efc..e12a4a3ca0 100644 --- a/tools/xenstore/xs.c +++ b/tools/xenstore/xs.c @@ -705,11 +705,18 @@ bool xs_watch(struct xs_handle *h, const char *path, const char *token) /* We dynamically create a reader thread on demand. */ mutex_lock(&h->request_mutex); if (!h->read_thr_exists) { + sigset_t set, old_set; + + sigfillset(&set); + pthread_sigmask(SIG_SETMASK, &set, &old_set); + if (pthread_create(&h->read_thr, NULL, read_thread, h) != 0) { + pthread_sigmask(SIG_SETMASK, &old_set, NULL); mutex_unlock(&h->request_mutex); return false; } h->read_thr_exists = 1; + pthread_sigmask(SIG_SETMASK, &old_set, NULL); } mutex_unlock(&h->request_mutex); #endif -- cgit v1.2.3