Browse Source

Check return values for pthread_rwlock_* functions

Cédric Augonnet 15 years ago
parent
commit
d2b1c0cfc3
4 changed files with 22 additions and 31 deletions
  1. 6 0
      src/common/utils.h
  2. 10 25
      src/core/perfmodel/perfmodel_history.c
  3. 4 4
      src/core/workers.c
  4. 2 2
      src/datawizard/copy_driver.c

+ 6 - 0
src/common/utils.h

@@ -31,6 +31,12 @@ int _starpu_check_mutex_deadlock(pthread_mutex_t *mutex);
 #define PTHREAD_MUTEX_LOCK(mutex) { int ret = pthread_mutex_lock(mutex); if (STARPU_UNLIKELY(ret)) { fprintf(stderr, "pthread_mutex_lock : %s", strerror(ret)); STARPU_ABORT(); }}
 #define PTHREAD_MUTEX_UNLOCK(mutex) { int ret = pthread_mutex_unlock(mutex); if (STARPU_UNLIKELY(ret)) { fprintf(stderr, "pthread_mutex_unlock : %s", strerror(ret)); STARPU_ABORT(); }}
 
+#define PTHREAD_RWLOCK_INIT(rwlock, attr) { int ret = pthread_rwlock_init((rwlock), (attr)); if (STARPU_UNLIKELY(ret)) { fprintf(stderr, "pthread_rwlock_init : %s", strerror(ret)); }}
+#define PTHREAD_RWLOCK_RDLOCK(rwlock) { int ret = pthread_rwlock_rdlock(rwlock); if (STARPU_UNLIKELY(ret)) { fprintf(stderr, "pthread_rwlock_rdlock : %s", strerror(ret)); }}
+#define PTHREAD_RWLOCK_WRLOCK(rwlock) { int ret = pthread_rwlock_wrlock(rwlock); if (STARPU_UNLIKELY(ret)) { fprintf(stderr, "pthread_rwlock_wrlock : %s", strerror(ret)); }}
+#define PTHREAD_RWLOCK_UNLOCK(rwlock) { int ret = pthread_rwlock_unlock(rwlock); if (STARPU_UNLIKELY(ret)) { fprintf(stderr, "pthread_rwlock_unlock : %s", strerror(ret)); }}
+#define PTHREAD_RWLOCK_DESTROY(rwlock) { int ret = pthread_rwlock_destroy(rwlock); if (STARPU_UNLIKELY(ret)) { fprintf(stderr, "pthread_rwlock_destroy : %s", strerror(ret)); }}
+
 #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();}}

+ 10 - 25
src/core/perfmodel/perfmodel_history.c

@@ -315,20 +315,9 @@ static void load_history_based_model(struct starpu_perfmodel_t *model, unsigned
 		return;
 	}
 	
-	int res;
-	res = pthread_rwlock_init(&model->model_rwlock, NULL);
-	if (STARPU_UNLIKELY(res))
-	{
-		perror("pthread_rwlock_init failed");
-		STARPU_ABORT();
-	}
+	PTHREAD_RWLOCK_INIT(&model->model_rwlock, NULL);
 
-	res = pthread_rwlock_wrlock(&model->model_rwlock);
-	if (STARPU_UNLIKELY(res))
-	{
-		perror("pthread_rwlock_wrlock failed");
-		STARPU_ABORT();
-	}
+	PTHREAD_RWLOCK_WRLOCK(&model->model_rwlock);
 
 	/* make sure the performance model directory exists (or create it) */
 	_starpu_create_sampling_directory_if_needed();
@@ -349,6 +338,7 @@ static void load_history_based_model(struct starpu_perfmodel_t *model, unsigned
 	model->benchmarking = calibrate_flag; 
 	
 	/* try to open an existing file and load it */
+	int res;
 	res = access(path, F_OK); 
 	if (res == 0) {
 		if (calibrate_flag == 2)
@@ -386,12 +376,7 @@ static void load_history_based_model(struct starpu_perfmodel_t *model, unsigned
 
 	model->is_loaded = STARPU_PERFMODEL_LOADED;
 
-	res = pthread_rwlock_unlock(&model->model_rwlock);
-	if (STARPU_UNLIKELY(res))
-	{
-		perror("pthread_rwlock_unlock");
-		STARPU_ABORT();
-	}
+	PTHREAD_RWLOCK_UNLOCK(&model->model_rwlock);
 }
 
 /* This function is intended to be used by external tools that should read
@@ -532,9 +517,9 @@ double _starpu_history_based_job_expected_length(struct starpu_perfmodel_t *mode
 	if (!history)
 		return -1.0;
 
-	pthread_rwlock_rdlock(&model->model_rwlock);
+	PTHREAD_RWLOCK_RDLOCK(&model->model_rwlock);
 	entry = _starpu_htbl_search_32(history, key);
-	pthread_rwlock_unlock(&model->model_rwlock);
+	PTHREAD_RWLOCK_UNLOCK(&model->model_rwlock);
 
 	exp = entry?entry->mean:-1.0;
 
@@ -566,7 +551,7 @@ void _starpu_update_perfmodel_history(starpu_job_t j, enum starpu_perf_archtype
 			reg_model = &per_arch_model->regression;
 			list = &per_arch_model->list;
 
-			pthread_rwlock_wrlock(&model->model_rwlock);
+			PTHREAD_RWLOCK_WRLOCK(&model->model_rwlock);
 	
 				entry = _starpu_htbl_search_32(history, key);
 	
@@ -621,13 +606,13 @@ void _starpu_update_perfmodel_history(starpu_job_t j, enum starpu_perf_archtype
 			reg_model->beta = num/denom;
 			reg_model->alpha = exp((reg_model->sumlny - reg_model->beta*reg_model->sumlnx)/n);
 			
-			pthread_rwlock_unlock(&model->model_rwlock);
+			PTHREAD_RWLOCK_UNLOCK(&model->model_rwlock);
 		}
 
 #ifdef STARPU_MODEL_DEBUG
 		FILE * debug_file = per_arch_model->debug_file;
 
-		pthread_rwlock_wrlock(&model->model_rwlock);
+		PTHREAD_RWLOCK_WRLOCK(&model->model_rwlock);
 
 		STARPU_ASSERT(j->footprint_is_computed);
 
@@ -645,7 +630,7 @@ void _starpu_update_perfmodel_history(starpu_job_t j, enum starpu_perf_archtype
 		}
 		fprintf(debug_file, "\n");	
 
-		pthread_rwlock_unlock(&model->model_rwlock);
+		PTHREAD_RWLOCK_UNLOCK(&model->model_rwlock);
 #endif
 	}
 }

+ 4 - 4
src/core/workers.c

@@ -405,7 +405,7 @@ static void _starpu_operate_on_all_queues_attached_to_node(unsigned nodeid, queu
 
 	starpu_mem_node_descr * const descr = _starpu_get_memory_node_description();
 
-	pthread_rwlock_rdlock(&descr->attached_queues_rwlock);
+	PTHREAD_RWLOCK_RDLOCK(&descr->attached_queues_rwlock);
 
 	unsigned nqueues = descr->queues_count[nodeid];
 
@@ -425,7 +425,7 @@ static void _starpu_operate_on_all_queues_attached_to_node(unsigned nodeid, queu
 		}
 	}
 
-	pthread_rwlock_unlock(&descr->attached_queues_rwlock);
+	PTHREAD_RWLOCK_UNLOCK(&descr->attached_queues_rwlock);
 }
 
 inline void _starpu_lock_all_queues_attached_to_node(unsigned node)
@@ -450,7 +450,7 @@ static void _starpu_operate_on_all_queues(queue_op op)
 
 	starpu_mem_node_descr * const descr = _starpu_get_memory_node_description();
 
-	pthread_rwlock_rdlock(&descr->attached_queues_rwlock);
+	PTHREAD_RWLOCK_RDLOCK(&descr->attached_queues_rwlock);
 
 	unsigned nqueues = descr->total_queues_count;
 
@@ -470,7 +470,7 @@ static void _starpu_operate_on_all_queues(queue_op op)
 		}
 	}
 
-	pthread_rwlock_unlock(&descr->attached_queues_rwlock);
+	PTHREAD_RWLOCK_UNLOCK(&descr->attached_queues_rwlock);
 }
 
 static void _starpu_kill_all_workers(struct starpu_machine_config_s *config)

+ 2 - 2
src/datawizard/copy_driver.c

@@ -30,7 +30,7 @@ void _starpu_wake_all_blocked_workers_on_node(unsigned nodeid)
 
 	starpu_mem_node_descr * const descr = _starpu_get_memory_node_description();
 
-	pthread_rwlock_rdlock(&descr->attached_queues_rwlock);
+	PTHREAD_RWLOCK_RDLOCK(&descr->attached_queues_rwlock);
 
 	unsigned nqueues = descr->queues_count[nodeid];
 	for (q_id = 0; q_id < nqueues; q_id++)
@@ -44,7 +44,7 @@ void _starpu_wake_all_blocked_workers_on_node(unsigned nodeid)
 		PTHREAD_MUTEX_UNLOCK(&q->activity_mutex);
 	}
 
-	pthread_rwlock_unlock(&descr->attached_queues_rwlock);
+	PTHREAD_RWLOCK_UNLOCK(&descr->attached_queues_rwlock);
 }
 
 void starpu_wake_all_blocked_workers(void)