cluster: STABLE32 - rgmanger: Don't destroy locked mutexes

Ryan McCabe rmccabe at fedoraproject.org
Fri Jul 12 19:43:40 UTC 2013


Gitweb:        http://git.fedorahosted.org/git/?p=cluster.git;a=commitdiff;h=75e0fd65e8713689585781724628cf69dfed4a92
Commit:        75e0fd65e8713689585781724628cf69dfed4a92
Parent:        156a32063baa99fefdb445c68111b174dc06753e
Author:        Ryan McCabe <rmccabe at redhat.com>
AuthorDate:    Fri Jul 12 15:42:45 2013 -0400
Committer:     Ryan McCabe <rmccabe at redhat.com>
CommitterDate: Fri Jul 12 15:42:45 2013 -0400

rgmanger: Don't destroy locked mutexes

Unlock locked mutexes before calling pthread_mutex_destroy()
on them.

Related: rhbz#983296

Signed-off-by: Ryan McCabe <rmccabe at redhat.com>
---
 rgmanager/src/clulib/libcpglock.c |    1 +
 rgmanager/src/daemons/rg_thread.c |   18 +++++-------------
 2 files changed, 6 insertions(+), 13 deletions(-)

diff --git a/rgmanager/src/clulib/libcpglock.c b/rgmanager/src/clulib/libcpglock.c
index f99edd4..75fc9f6 100644
--- a/rgmanager/src/clulib/libcpglock.c
+++ b/rgmanager/src/clulib/libcpglock.c
@@ -279,6 +279,7 @@ cpg_lock_fin(void *handle)
 
 	close(h->fd);
 
+	pthread_mutex_unlock(&h->mutex);
 	pthread_mutex_destroy(&h->mutex);
 	free(h);
 	return 0;
diff --git a/rgmanager/src/daemons/rg_thread.c b/rgmanager/src/daemons/rg_thread.c
index 4f46c25..1d7b1fb 100644
--- a/rgmanager/src/daemons/rg_thread.c
+++ b/rgmanager/src/daemons/rg_thread.c
@@ -533,20 +533,12 @@ resgroup_thread_main(void *arg)
 	}
 	 */
 
+	pthread_mutex_unlock(&my_queue_mutex);
 	mystatus = pthread_mutex_destroy(&my_queue_mutex);
-	if (mystatus != 0)
-	{
-		if (mystatus == EBUSY) {
-			pthread_mutex_unlock(&my_queue_mutex);
-		}
-
-		mystatus = pthread_mutex_destroy(&my_queue_mutex);
-		if (mystatus != 0) {
-			fprintf (stderr, "mutex_destroy=%d err=%d %p\n", 
-			    mystatus, errno, &my_queue_mutex);
-
-			fflush (stderr);
-		}
+	if (mystatus != 0) {
+		fprintf(stderr, "mutex_destroy=%d err=%d %p\n", 
+		    mystatus, errno, &my_queue_mutex);
+		fflush (stderr);
 	}
 
 	list_remove(&resthread_list, myself);


More information about the cluster-commits mailing list