Explorar o código

Yet more return value checking for condition variables

Cédric Augonnet %!s(int64=15) %!d(string=hai) anos
pai
achega
0f9a02a475

+ 1 - 0
src/common/utils.h

@@ -32,6 +32,7 @@ int _starpu_check_mutex_deadlock(pthread_mutex_t *mutex);
 
 #define PTHREAD_COND_INIT(cond, attr) { int ret = pthread_cond_init((cond), (attr)); if (STARPU_UNLIKELY(ret)) { fprintf(stderr, "pthread_cond_init : %s", strerror(ret)); STARPU_ABORT(); }}
 #define PTHREAD_COND_DESTROY(cond) { int ret = pthread_cond_destroy(cond); if (STARPU_UNLIKELY(ret)) { fprintf(stderr, "pthread_cond_destroy : %s", strerror(ret)); STARPU_ABORT();}}
+#define PTHREAD_COND_SIGNAL(cond) { int ret = pthread_cond_signal(cond); if (STARPU_UNLIKELY(ret)) { fprintf(stderr, "pthread_cond_signal : %s", strerror(ret)); STARPU_ABORT();}}
 #define PTHREAD_COND_BROADCAST(cond) { int ret = pthread_cond_broadcast(cond); if (STARPU_UNLIKELY(ret)) { fprintf(stderr, "pthread_cond_broadcast : %s", strerror(ret)); STARPU_ABORT();}}
 #define PTHREAD_COND_WAIT(cond, mutex) { int ret = pthread_cond_wait((cond), (mutex)); if (STARPU_UNLIKELY(ret)) { fprintf(stderr, "pthread_cond_wait : %s", strerror(ret)); STARPU_ABORT();}}
 

+ 4 - 12
src/core/task.c

@@ -242,18 +242,13 @@ void starpu_display_codelet_stats(struct starpu_codelet_t *cl)
  */
 int starpu_wait_all_tasks(void)
 {
-	int res;
-
 	if (STARPU_UNLIKELY(!_starpu_worker_may_perform_blocking_calls()))
 		return -EDEADLK;
 
 	PTHREAD_MUTEX_LOCK(&submitted_mutex);
 
-	if (nsubmitted > 0)
-	{
-		res = pthread_cond_wait(&submitted_cond, &submitted_mutex);
-		STARPU_ASSERT(!res);
-	}
+	while (nsubmitted > 0)
+		PTHREAD_COND_WAIT(&submitted_cond, &submitted_mutex);
 	
 	PTHREAD_MUTEX_UNLOCK(&submitted_mutex);
 
@@ -263,13 +258,10 @@ int starpu_wait_all_tasks(void)
 void _starpu_decrement_nsubmitted_tasks(void)
 {
 	PTHREAD_MUTEX_LOCK(&submitted_mutex);
+
 	if (--nsubmitted == 0)
-	{
-		int broadcast_res;
-		broadcast_res = pthread_cond_broadcast(&submitted_cond);
-		STARPU_ASSERT(!broadcast_res);
+		PTHREAD_COND_BROADCAST(&submitted_cond);
 
-	}
 	PTHREAD_MUTEX_UNLOCK(&submitted_mutex);
 
 }

+ 4 - 4
src/core/workers.c

@@ -263,7 +263,7 @@ int starpu_init(struct starpu_conf *user_conf)
 		init_count--;
 		initialized = UNINITIALIZED;
 		/* Let somebody else try to do it */
-		pthread_cond_signal(&init_cond);
+		PTHREAD_COND_SIGNAL(&init_cond);
 		PTHREAD_MUTEX_UNLOCK(&init_mutex);
 		return ret;
 	}
@@ -282,7 +282,7 @@ int starpu_init(struct starpu_conf *user_conf)
 	PTHREAD_MUTEX_LOCK(&init_mutex);
 	initialized = INITIALIZED;
 	/* Tell everybody that we initialized */
-	pthread_cond_broadcast(&init_cond);
+	PTHREAD_COND_BROADCAST(&init_cond);
 	PTHREAD_MUTEX_UNLOCK(&init_mutex);
 
 	return 0;
@@ -383,7 +383,7 @@ static void _starpu_operate_on_all_queues_attached_to_node(unsigned nodeid, queu
 		q  = descr->attached_queues_per_node[nodeid][q_id];
 		switch (op) {
 			case BROADCAST:
-				pthread_cond_broadcast(&q->activity_cond);
+				PTHREAD_COND_BROADCAST(&q->activity_cond);
 				break;
 			case LOCK:
 				PTHREAD_MUTEX_LOCK(&q->activity_mutex);
@@ -428,7 +428,7 @@ static void _starpu_operate_on_all_queues(queue_op op)
 		q  = descr->attached_queues_all[q_id];
 		switch (op) {
 			case BROADCAST:
-				pthread_cond_broadcast(&q->activity_cond);
+				PTHREAD_COND_BROADCAST(&q->activity_cond);
 				break;
 			case LOCK:
 				PTHREAD_MUTEX_LOCK(&q->activity_mutex);

+ 2 - 2
src/datawizard/user_interactions.c

@@ -79,7 +79,7 @@ static inline void _starpu_sync_data_with_mem_continuation(void *arg)
 		/* continuation of starpu_sync_data_with_mem */
 		PTHREAD_MUTEX_LOCK(&statenode->lock);
 		statenode->finished = 1;
-		pthread_cond_signal(&statenode->cond);
+		PTHREAD_COND_SIGNAL(&statenode->cond);
 		PTHREAD_MUTEX_UNLOCK(&statenode->lock);
 	}
 }
@@ -174,7 +174,7 @@ static void _prefetch_data_on_node(void *arg)
 
 	PTHREAD_MUTEX_LOCK(&statenode->lock);
 	statenode->finished = 1;
-	pthread_cond_signal(&statenode->cond);
+	PTHREAD_COND_SIGNAL(&statenode->cond);
 	PTHREAD_MUTEX_UNLOCK(&statenode->lock);
 
 	if (!statenode->async)

+ 1 - 1
src/drivers/cuda/driver_cuda.c

@@ -216,7 +216,7 @@ void *_starpu_cuda_worker(void *arg)
 	/* tell the main thread that this one is ready */
 	PTHREAD_MUTEX_LOCK(&args->mutex);
 	args->worker_is_initialized = 1;
-	pthread_cond_signal(&args->ready_cond);
+	PTHREAD_COND_SIGNAL(&args->ready_cond);
 	PTHREAD_MUTEX_UNLOCK(&args->mutex);
 
 	struct starpu_job_s * j;

+ 2 - 2
src/drivers/gordon/driver_gordon.c

@@ -57,7 +57,7 @@ void *gordon_worker_progress(void *arg)
 
 	PTHREAD_MUTEX_LOCK(&progress_mutex);
 	progress_thread_is_inited = 1;
-	pthread_cond_signal(&progress_cond);
+	PTHREAD_COND_SIGNAL(&progress_cond);
 	PTHREAD_MUTEX_UNLOCK(&progress_mutex);
 
 	while (1) {
@@ -454,7 +454,7 @@ void *_starpu_gordon_worker(void *arg)
 	/* tell the core that gordon is ready */
 	PTHREAD_MUTEX_LOCK(&gordon_set_arg->mutex);
 	gordon_set_arg->set_is_initialized = 1;
-	pthread_cond_signal(&gordon_set_arg->ready_cond);
+	PTHREAD_COND_SIGNAL(&gordon_set_arg->ready_cond);
 	PTHREAD_MUTEX_UNLOCK(&gordon_set_arg->mutex);
 
 	gordon_worker_inject(gordon_set_arg);