changeset 97:55d9e3443e59

Fix in meq_del. The parameter is ** not *.
author Sebastien Decugis <sdecugis@nict.go.jp>
date Thu, 17 Jul 2008 18:23:09 +0900
parents 0077037f269f
children 7d3d175c3b8d
files waaad/queues.c waaad/tests/testmeq.c
diffstat 2 files changed, 18 insertions(+), 17 deletions(-) [+]
line wrap: on
line diff
--- a/waaad/queues.c	Thu Jul 17 18:17:36 2008 +0900
+++ b/waaad/queues.c	Thu Jul 17 18:23:09 2008 +0900
@@ -162,17 +162,17 @@
 	
 	ret = meq_del(&g_meq_incoming);
 	if (ret != 0) {
-		TRACE_DEBUG(INFO, "Failed to initialize a queue: %s", strerror(ret));
+		TRACE_DEBUG(INFO, "Failed to delete a queue: %s", strerror(ret));
 		return ret;
 	}
 	ret = meq_del(&g_meq_outgoing);
 	if (ret != 0) {
-		TRACE_DEBUG(INFO, "Failed to initialize a queue: %s", strerror(ret));
+		TRACE_DEBUG(INFO, "Failed to delete a queue: %s", strerror(ret));
 		return ret;
 	}
 	ret = meq_del(&g_meq_local);
 	if (ret != 0) {
-		TRACE_DEBUG(INFO, "Failed to initialize a queue: %s", strerror(ret));
+		TRACE_DEBUG(INFO, "Failed to delete a queue: %s", strerror(ret));
 		return ret;
 	}
 	return 0;
@@ -232,20 +232,20 @@
 	
 	TRACE_ENTRY( "%p", queue );
 
-	if ( ! CHECK_QUEUE( queue ) ) {
+	if ( ! CHECK_QUEUE( *queue ) ) {
 		TRACE_DEBUG(INFO, "Invalid parameter");
 		return EINVAL;
 	}
 	
-	ret = pthread_mutex_lock( &_Q(queue)->mtx );
+	ret = pthread_mutex_lock( &_Q(*queue)->mtx );
 	if (ret != 0) {
 		TRACE_DEBUG(INFO, "pthread_mutex_lock failed: %s", strerror(ret));
 		return ret;
 	}
 	
-	if ((_Q(queue)->count != 0) || (_Q(queue)->thrs != 0)) {
-		TRACE_DEBUG(INFO, "The queue count is %d, thread count %d, cannot destroy", _Q(queue)->count, _Q(queue)->thrs);
-		ret = pthread_mutex_unlock( &_Q(queue)->mtx );
+	if ((_Q(*queue)->count != 0) || (_Q(*queue)->thrs != 0)) {
+		TRACE_DEBUG(INFO, "The queue count is %d, thread count %d, cannot destroy", _Q(*queue)->count, _Q(*queue)->thrs);
+		ret = pthread_mutex_unlock( &_Q(*queue)->mtx );
 		if (ret != 0) {
 			TRACE_DEBUG(INFO, "pthread_mutex_unlock failed (ignored): %s", strerror(ret));
 		}
@@ -253,31 +253,32 @@
 	}
 	
 	/* sanity check */
-	assert(LI_isempty(&_Q(queue)->list));
+	assert(LI_isempty(&_Q(*queue)->list));
 	
 	/* Ok, now invalidate the queue */
-	_Q(queue)->eyec = 0xdead;
+	_Q(*queue)->eyec = 0xdead;
 	
 	/* And destroy it */
-	ret = pthread_mutex_unlock( &_Q(queue)->mtx );
+	ret = pthread_mutex_unlock( &_Q(*queue)->mtx );
 	if (ret != 0) {
 		TRACE_DEBUG(INFO, "pthread_mutex_unlock failed: %s", strerror(ret));
 		return ret;
 	}
 	
-	ret = pthread_cond_destroy( &_Q(queue)->cond );
+	ret = pthread_cond_destroy( &_Q(*queue)->cond );
 	if (ret != 0) {
 		TRACE_DEBUG(INFO, "pthread_cond_destroy failed: %s", strerror(ret));
 		return ret;
 	}
 	
-	ret = pthread_mutex_destroy( &_Q(queue)->mtx );
+	ret = pthread_mutex_destroy( &_Q(*queue)->mtx );
 	if (ret != 0) {
 		TRACE_DEBUG(INFO, "pthread_mutex_destroy failed: %s", strerror(ret));
 		return ret;
 	}
 	
-	free(queue);
+	free(*queue);
+	*queue = NULL;
 	return 0;
 }
 
--- a/waaad/tests/testmeq.c	Thu Jul 17 18:17:36 2008 +0900
+++ b/waaad/tests/testmeq.c	Thu Jul 17 18:23:09 2008 +0900
@@ -148,7 +148,7 @@
 		CHECK( 0, count);
 		
 		/* We're done for basic tests */
-		CHECK( 0, meq_del(queue) );
+		CHECK( 0, meq_del(&queue) );
 	}
 	
 	/* Test robustness, ensure no messages are lost */
@@ -219,7 +219,7 @@
 		CHECK( 0, count);
 		
 		/* Destroy this queue and the messages */
-		CHECK( 0, meq_del(queue) );
+		CHECK( 0, meq_del(&queue) );
 		for (i=0; i < NBR_MSG * NBR_THREADS * 2; i++) {
 			CHECK( 0, msg_free(  msgs[i], 1 ) );
 		}
@@ -286,7 +286,7 @@
 		CHECK( 0, pthread_join( th, NULL ) );
 		
 		/* Destroy the queue */
-		CHECK( 0, meq_del(queue) );
+		CHECK( 0, meq_del(&queue) );
 	}
 	
 	/* Delete the messages */
"Welcome to our mercurial repository"