Browse Source

Fix deadlock between fxt and mpi when STARPU_FXT_TRACE is 0

Samuel Thibault 7 years ago
parent
commit
4bda3d1ccf
2 changed files with 9 additions and 3 deletions
  1. 7 2
      src/common/fxt.c
  2. 2 1
      src/common/fxt.h

+ 7 - 2
src/common/fxt.c

@@ -40,6 +40,7 @@ unsigned long _starpu_job_cnt = 0;
 
 static char _STARPU_PROF_FILE_USER[128];
 int _starpu_fxt_started = 0;
+int _starpu_fxt_willstart = 1;
 starpu_pthread_mutex_t _starpu_fxt_started_mutex = STARPU_PTHREAD_MUTEX_INITIALIZER;
 starpu_pthread_cond_t _starpu_fxt_started_cond = STARPU_PTHREAD_COND_INITIALIZER;
 
@@ -138,10 +139,14 @@ void _starpu_fxt_init_profiling(unsigned trace_buffer_size)
 {
 	unsigned threadid;
 
-	if (!starpu_get_env_number_default("STARPU_FXT_TRACE", 1))
+	STARPU_PTHREAD_MUTEX_LOCK(&_starpu_fxt_started_mutex);
+	if (!(_starpu_fxt_willstart = starpu_get_env_number_default("STARPU_FXT_TRACE", 1)))
+	{
+		STARPU_PTHREAD_COND_BROADCAST(&_starpu_fxt_started_cond);
+		STARPU_PTHREAD_MUTEX_UNLOCK(&_starpu_fxt_started_mutex);
 		return;
+	}
 
-	STARPU_PTHREAD_MUTEX_LOCK(&_starpu_fxt_started_mutex);
 	STARPU_ASSERT(!_starpu_fxt_started);
 
 	_starpu_fxt_started = 1;

+ 2 - 1
src/common/fxt.h

@@ -251,13 +251,14 @@ void fut_set_filename(char *filename);
 #endif
 
 extern int _starpu_fxt_started;
+extern int _starpu_fxt_willstart;
 extern starpu_pthread_mutex_t _starpu_fxt_started_mutex;
 extern starpu_pthread_cond_t _starpu_fxt_started_cond;
 
 static inline void _starpu_fxt_wait_initialisation()
 {
 	STARPU_PTHREAD_MUTEX_LOCK(&_starpu_fxt_started_mutex);
-	while (!_starpu_fxt_started)
+	while (_starpu_fxt_willstart && !_starpu_fxt_started)
 		STARPU_PTHREAD_COND_WAIT(&_starpu_fxt_started_cond, &_starpu_fxt_started_mutex);
 	STARPU_PTHREAD_MUTEX_UNLOCK(&_starpu_fxt_started_mutex);
 }