|
|
d1207a7 |
---
|
|
|
d1207a7 |
libmultipath/log_pthread.c | 3 +++
|
|
|
d1207a7 |
multipathd/main.c | 12 +++++-------
|
|
|
d1207a7 |
2 files changed, 8 insertions(+), 7 deletions(-)
|
|
|
d1207a7 |
|
|
|
d1207a7 |
Index: multipath-tools-130222/multipathd/main.c
|
|
|
d1207a7 |
===================================================================
|
|
|
d1207a7 |
--- multipath-tools-130222.orig/multipathd/main.c
|
|
|
d1207a7 |
+++ multipath-tools-130222/multipathd/main.c
|
|
|
d1207a7 |
@@ -1473,7 +1473,9 @@ sighup (int sig)
|
|
|
d1207a7 |
if (running_state != DAEMON_RUNNING)
|
|
|
d1207a7 |
return;
|
|
|
d1207a7 |
|
|
|
d1207a7 |
+ lock(gvecs->lock);
|
|
|
d1207a7 |
reconfigure(gvecs);
|
|
|
d1207a7 |
+ unlock(gvecs->lock);
|
|
|
d1207a7 |
|
|
|
d1207a7 |
#ifdef _DEBUG_
|
|
|
d1207a7 |
dbg_free_final(NULL);
|
|
|
d1207a7 |
@@ -1487,16 +1489,9 @@ sigend (int sig)
|
|
|
d1207a7 |
}
|
|
|
d1207a7 |
|
|
|
d1207a7 |
static void
|
|
|
d1207a7 |
-sigusr1 (int sig)
|
|
|
d1207a7 |
-{
|
|
|
d1207a7 |
- condlog(3, "SIGUSR1 received");
|
|
|
d1207a7 |
-}
|
|
|
d1207a7 |
-
|
|
|
d1207a7 |
-static void
|
|
|
d1207a7 |
signal_init(void)
|
|
|
d1207a7 |
{
|
|
|
d1207a7 |
signal_set(SIGHUP, sighup);
|
|
|
d1207a7 |
- signal_set(SIGUSR1, sigusr1);
|
|
|
d1207a7 |
signal_set(SIGINT, sigend);
|
|
|
d1207a7 |
signal_set(SIGTERM, sigend);
|
|
|
d1207a7 |
signal(SIGPIPE, SIG_IGN);
|
|
|
d1207a7 |
@@ -1652,6 +1647,7 @@ child (void * param)
|
|
|
d1207a7 |
*/
|
|
|
d1207a7 |
running_state = DAEMON_CONFIGURE;
|
|
|
d1207a7 |
|
|
|
d1207a7 |
+ block_signal(SIGHUP, &set);
|
|
|
d1207a7 |
lock(vecs->lock);
|
|
|
d1207a7 |
if (configure(vecs, 1)) {
|
|
|
d1207a7 |
unlock(vecs->lock);
|
|
|
d1207a7 |
@@ -1659,6 +1655,7 @@ child (void * param)
|
|
|
d1207a7 |
exit(1);
|
|
|
d1207a7 |
}
|
|
|
d1207a7 |
unlock(vecs->lock);
|
|
|
d1207a7 |
+ pthread_sigmask(SIG_SETMASK, &set, NULL);
|
|
|
d1207a7 |
|
|
|
d1207a7 |
/*
|
|
|
d1207a7 |
* start threads
|
|
|
d1207a7 |
@@ -1691,6 +1688,7 @@ child (void * param)
|
|
|
d1207a7 |
*/
|
|
|
d1207a7 |
running_state = DAEMON_SHUTDOWN;
|
|
|
d1207a7 |
pthread_sigmask(SIG_UNBLOCK, &set, NULL);
|
|
|
d1207a7 |
+ block_signal(SIGUSR1, NULL);
|
|
|
d1207a7 |
block_signal(SIGHUP, NULL);
|
|
|
d1207a7 |
lock(vecs->lock);
|
|
|
d1207a7 |
if (conf->queue_without_daemon == QUE_NO_DAEMON_OFF)
|
|
|
d1207a7 |
Index: multipath-tools-130222/libmultipath/log_pthread.c
|
|
|
d1207a7 |
===================================================================
|
|
|
d1207a7 |
--- multipath-tools-130222.orig/libmultipath/log_pthread.c
|
|
|
d1207a7 |
+++ multipath-tools-130222/libmultipath/log_pthread.c
|
|
|
d1207a7 |
@@ -55,14 +55,17 @@ void log_safe (int prio, const char * fm
|
|
|
d1207a7 |
|
|
|
d1207a7 |
void log_thread_flush (void)
|
|
|
d1207a7 |
{
|
|
|
d1207a7 |
+ sigset_t old;
|
|
|
d1207a7 |
int empty;
|
|
|
d1207a7 |
|
|
|
d1207a7 |
do {
|
|
|
d1207a7 |
+ block_signal(SIGUSR1, &old;;
|
|
|
d1207a7 |
pthread_mutex_lock(&logq_lock);
|
|
|
d1207a7 |
empty = log_dequeue(la->buff);
|
|
|
d1207a7 |
pthread_mutex_unlock(&logq_lock);
|
|
|
d1207a7 |
if (!empty)
|
|
|
d1207a7 |
log_syslog(la->buff);
|
|
|
d1207a7 |
+ pthread_sigmask(SIG_SETMASK, &old, NULL);
|
|
|
d1207a7 |
} while (empty == 0);
|
|
|
d1207a7 |
}
|
|
|
d1207a7 |
|