aboutsummaryrefslogtreecommitdiffstats
path: root/tools/xenstore
diff options
context:
space:
mode:
authorSimon Rowe <simon.rowe@eu.citrix.com>2012-06-07 18:22:20 +0100
committerSimon Rowe <simon.rowe@eu.citrix.com>2012-06-07 18:22:20 +0100
commit6d0f60577a9af65ab32a026483cb6c7189aaf842 (patch)
tree2a69dfb93c239631bb9df665f1783609ec8c4c87 /tools/xenstore
parentd4b4e22f2b94e5a5f9392f7db2c44b219966f9d0 (diff)
downloadxen-6d0f60577a9af65ab32a026483cb6c7189aaf842.tar.gz
xen-6d0f60577a9af65ab32a026483cb6c7189aaf842.tar.bz2
xen-6d0f60577a9af65ab32a026483cb6c7189aaf842.zip
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 <simon.rowe@eu.citrix.com> Acked-by: Ian Jackson <ian.jackson@eu.citrix.com> Committed-by: Ian Jackson <ian.jackson@eu.citrix.com>
Diffstat (limited to 'tools/xenstore')
-rw-r--r--tools/xenstore/xs.c7
1 files changed, 7 insertions, 0 deletions
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