70 lines
2.1 KiB
Diff
70 lines
2.1 KiB
Diff
|
---
|
||
|
libmultipath/log_pthread.c | 1 +
|
||
|
libmultipath/waiter.c | 1 +
|
||
|
multipathd/main.c | 6 +++++-
|
||
|
3 files changed, 7 insertions(+), 1 deletion(-)
|
||
|
|
||
|
Index: multipath-tools-120123/multipathd/main.c
|
||
|
===================================================================
|
||
|
--- multipath-tools-120123.orig/multipathd/main.c
|
||
|
+++ multipath-tools-120123/multipathd/main.c
|
||
|
@@ -735,6 +735,7 @@ uxsock_trigger (char * str, char ** repl
|
||
|
|
||
|
pthread_cleanup_push(cleanup_lock, &vecs->lock);
|
||
|
lock(vecs->lock);
|
||
|
+ pthread_testcancel();
|
||
|
|
||
|
r = parse_cmd(str, reply, len, vecs);
|
||
|
|
||
|
@@ -787,7 +788,9 @@ uev_trigger (struct uevent * uev, void *
|
||
|
if (uev_discard(uev->devpath))
|
||
|
return 0;
|
||
|
|
||
|
+ pthread_cleanup_push(cleanup_lock, &vecs->lock);
|
||
|
lock(vecs->lock);
|
||
|
+ pthread_testcancel();
|
||
|
|
||
|
/*
|
||
|
* device map event
|
||
|
@@ -827,7 +830,7 @@ uev_trigger (struct uevent * uev, void *
|
||
|
}
|
||
|
|
||
|
out:
|
||
|
- unlock(vecs->lock);
|
||
|
+ lock_cleanup_pop(vecs->lock);
|
||
|
return r;
|
||
|
}
|
||
|
|
||
|
@@ -1295,6 +1298,7 @@ checkerloop (void *ap)
|
||
|
block_signal(SIGHUP, &old);
|
||
|
pthread_cleanup_push(cleanup_lock, &vecs->lock);
|
||
|
lock(vecs->lock);
|
||
|
+ pthread_testcancel();
|
||
|
condlog(4, "tick");
|
||
|
|
||
|
if (vecs->pathvec) {
|
||
|
Index: multipath-tools-120123/libmultipath/waiter.c
|
||
|
===================================================================
|
||
|
--- multipath-tools-120123.orig/libmultipath/waiter.c
|
||
|
+++ multipath-tools-120123/libmultipath/waiter.c
|
||
|
@@ -157,6 +157,7 @@ int waiteventloop (struct event_thread *
|
||
|
*/
|
||
|
pthread_cleanup_push(cleanup_lock, &waiter->vecs->lock);
|
||
|
lock(waiter->vecs->lock);
|
||
|
+ pthread_testcancel();
|
||
|
r = update_multipath(waiter->vecs, waiter->mapname, 1);
|
||
|
lock_cleanup_pop(waiter->vecs->lock);
|
||
|
|
||
|
Index: multipath-tools-120123/libmultipath/log_pthread.c
|
||
|
===================================================================
|
||
|
--- multipath-tools-120123.orig/libmultipath/log_pthread.c
|
||
|
+++ multipath-tools-120123/libmultipath/log_pthread.c
|
||
|
@@ -87,6 +87,7 @@ void log_thread_stop (void)
|
||
|
pthread_mutex_lock(logq_lock);
|
||
|
pthread_cancel(log_thr);
|
||
|
pthread_mutex_unlock(logq_lock);
|
||
|
+ pthread_join(log_thr, NULL);
|
||
|
|
||
|
flush_logqueue();
|
||
|
|