device-mapper-multipath/0017-RH-fix-shutdown-crash.patch
Benjamin Marzinski 8d4916400c Add back missing patches
0012-RH-update-on-show-topology.patch
0013-RH-manpage-update.patch
0014-RH-RHEL5-style-partitions.patch
0015-RH-add-followover.patch
0016-RH-dont-remove-map-on-enomem.patch
0017-RH-fix-shutdown-crash.patch
0018-RH-warn-on-bad-dev-loss-tmo.patch
0019-RH-deprecate-uid-gid-mode.patch
0020-RH-dont-remove-map-twice.patch
0021-RH-validate-guid-partitions.patch
0022-RH-adjust-messages.patch
0023-RH-manpage-update.patch
2012-02-10 11:38:28 -06:00

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();