浏览代码

fix using uninitialized key values

Samuel Thibault 9 年之前
父节点
当前提交
c42090835b
共有 1 个文件被更改,包括 9 次插入0 次删除
  1. 9 0
      src/core/workers.c

+ 9 - 0
src/core/workers.c

@@ -53,6 +53,7 @@ static starpu_pthread_cond_t init_cond = STARPU_PTHREAD_COND_INITIALIZER;
 static int init_count = 0;
 static enum { UNINITIALIZED, CHANGING, INITIALIZED } initialized = UNINITIALIZED;
 
+static int keys_initialized;
 static starpu_pthread_key_t worker_key;
 static starpu_pthread_key_t worker_set_key;
 
@@ -893,21 +894,27 @@ static void _starpu_launch_drivers(struct _starpu_machine_config *pconfig)
 
 void _starpu_set_local_worker_key(struct _starpu_worker *worker)
 {
+	STARPU_ASSERT(keys_initialized);
 	STARPU_PTHREAD_SETSPECIFIC(worker_key, worker);
 }
 
 struct _starpu_worker *_starpu_get_local_worker_key(void)
 {
+	if (!keys_initialized)
+		return NULL;
 	return (struct _starpu_worker *) STARPU_PTHREAD_GETSPECIFIC(worker_key);
 }
 
 void _starpu_set_local_worker_set_key(struct _starpu_worker_set *worker)
 {
+	STARPU_ASSERT(keys_initialized);
 	STARPU_PTHREAD_SETSPECIFIC(worker_set_key, worker);
 }
 
 struct _starpu_worker_set *_starpu_get_local_worker_set_key(void)
 {
+	if (!keys_initialized)
+		return NULL;
 	return (struct _starpu_worker_set *) STARPU_PTHREAD_GETSPECIFIC(worker_set_key);
 }
 
@@ -1270,6 +1277,7 @@ int starpu_initialize(struct starpu_conf *user_conf, int *argc, char ***argv)
 	disable_kernels = starpu_get_env_number("STARPU_DISABLE_KERNELS");
 	STARPU_PTHREAD_KEY_CREATE(&worker_key, NULL);
 	STARPU_PTHREAD_KEY_CREATE(&worker_set_key, NULL);
+	keys_initialized = 1;
 
 	_starpu_build_tree();
 
@@ -1570,6 +1578,7 @@ void starpu_shutdown(void)
 #endif
 	_starpu_close_debug_logfile();
 
+	keys_initialized = 0;
 	STARPU_PTHREAD_KEY_DELETE(worker_key);
 	STARPU_PTHREAD_KEY_DELETE(worker_set_key);