diff options
| author | Anand Avati <avati@redhat.com> | 2013-09-24 09:45:08 -0700 | 
|---|---|---|
| committer | Vijay Bellur <vbellur@redhat.com> | 2013-09-25 01:33:16 -0700 | 
| commit | 84fa8af38d2eab0f72349abb8136811bd3e96570 (patch) | |
| tree | b8f21737a9c9dc083531d26762053a9edf1153fd /libglusterfs/src/common-utils.c | |
| parent | 8737b4697ad555a1e49ef87b5d439bfb74d8b5b5 (diff) | |
core: block unused signals in created threads
Block all signal except those which are set for explicit handling
in glusterfs_signals_setup(). Since thread spawning code in
libglusterfs and xlators can get called from application threads
when used through libgfapi, it is necessary to do this blocking.
Change-Id: Ia320f80521a83d2edcda50b9ad414583a0175281
BUG: 1011662
Signed-off-by: Anand Avati <avati@redhat.com>
Reviewed-on: http://review.gluster.org/5995
Tested-by: Gluster Build System <jenkins@build.gluster.com>
Reviewed-by: Amar Tumballi <amarts@redhat.com>
Reviewed-by: Vijay Bellur <vbellur@redhat.com>
Diffstat (limited to 'libglusterfs/src/common-utils.c')
| -rw-r--r-- | libglusterfs/src/common-utils.c | 27 | 
1 files changed, 27 insertions, 0 deletions
diff --git a/libglusterfs/src/common-utils.c b/libglusterfs/src/common-utils.c index f223a3f8a85..d57cd8a55fe 100644 --- a/libglusterfs/src/common-utils.c +++ b/libglusterfs/src/common-utils.c @@ -2807,6 +2807,7 @@ out:  } +  /* Sets log file path from user provided arguments */  int  gf_set_log_file_path (cmd_args_t *cmd_args) @@ -2868,3 +2869,29 @@ gf_set_log_file_path (cmd_args_t *cmd_args)  done:          return ret;  } + +int +gf_thread_create (pthread_t *thread, const pthread_attr_t *attr, +		  void *(*start_routine)(void *), void *arg) +{ +	sigset_t set, old; +	int ret; + +	sigemptyset (&set); + +	sigfillset (&set); +	sigdelset (&set, SIGSEGV); +	sigdelset (&set, SIGBUS); +	sigdelset (&set, SIGILL); +	sigdelset (&set, SIGSYS); +	sigdelset (&set, SIGFPE); +	sigdelset (&set, SIGABRT); + +	pthread_sigmask (SIG_BLOCK, &set, &old); + +	ret = pthread_create (thread, attr, start_routine, arg); + +	pthread_sigmask (SIG_SETMASK, &old, NULL); + +	return ret; +}  | 
