Browse Source

Fix worker components destruction

Samuel Thibault 10 years ago
parent
commit
b3a8cbf090

+ 2 - 0
src/core/workers.c

@@ -30,6 +30,7 @@
 #include <datawizard/malloc.h>
 #include <profiling/profiling.h>
 #include <starpu_task_list.h>
+#include <sched_policies/sched_component.h>
 #include <drivers/mp_common/sink_common.h>
 #include <drivers/scc/driver_scc_common.h>
 
@@ -1344,6 +1345,7 @@ void starpu_shutdown(void)
 	}
 
 	_starpu_delete_all_sched_ctxs();
+	_starpu_sched_component_workers_destroy();
 
 	_starpu_disk_unregister();
 #ifdef STARPU_HAVE_HWLOC

+ 2 - 3
src/sched_policies/component_sched.c

@@ -168,8 +168,6 @@ void starpu_sched_component_prefetch_on_node(struct starpu_sched_component * com
 void starpu_sched_component_destroy(struct starpu_sched_component *component)
 {
 	STARPU_ASSERT(component);
-	if(starpu_sched_component_is_worker(component))
-		return;
 	int i,j;
 	for(i = 0; i < component->nchildren; i++)
 	{
@@ -211,7 +209,8 @@ void starpu_sched_component_destroy_rec(struct starpu_sched_component * componen
 			starpu_sched_component_destroy_rec(component->children[i]);
 	}
 
-	starpu_sched_component_destroy(component);
+	if (!starpu_sched_component_is_worker(component))
+		starpu_sched_component_destroy(component);
 }
 
 void set_properties(struct starpu_sched_component * component)

+ 6 - 11
src/sched_policies/component_worker.c

@@ -1,6 +1,6 @@
 /* StarPU --- Runtime system for heterogeneous multicore architectures.
  *
- * Copyright (C) 2010-2013  Université de Bordeaux 1
+ * Copyright (C) 2010-2014  Université de Bordeaux 1
  * Copyright (C) 2010, 2011, 2012, 2013  Centre National de la Recherche Scientifique
  * Copyright (C) 2011  Télécom-SudParis
  * Copyright (C) 2011-2013  INRIA
@@ -573,7 +573,7 @@ static void _worker_component_deinit_data(struct starpu_sched_component * compon
 		if(_worker_components[i] == component)
 		{
 			_worker_components[i] = NULL;
-			return;
+			break;
 		}
 	free(d);
 }
@@ -817,17 +817,12 @@ void _starpu_sched_component_unlock_all_workers(void)
 		_starpu_sched_component_unlock_worker(i);
 }
 
-void starpu_sched_component_worker_destroy(struct starpu_sched_component *component)
+void _starpu_sched_component_workers_destroy(void)
 {
-	struct _starpu_worker * worker = _starpu_sched_component_worker_get_worker(component);
-	unsigned id = worker->workerid;
-	assert(_worker_components[id] == component);
 	int i;
-	for(i = 0; i < STARPU_NMAX_SCHED_CTXS ; i++)
-		if(component->parents[i] != NULL)
-			return;//this component is shared between several contexts
-	starpu_sched_component_destroy(component);
-	_worker_components[id] = NULL;
+	for(i = 0; i < STARPU_NMAXWORKERS; i++)
+		if (_worker_components[i])
+			starpu_sched_component_destroy(_worker_components[i]);
 }
 
 int starpu_sched_component_worker_get_workerid(struct starpu_sched_component * worker_component)

+ 2 - 0
src/sched_policies/sched_component.h

@@ -26,6 +26,8 @@ void _starpu_sched_component_unlock_all_workers(void);
 void _starpu_sched_component_lock_worker(int workerid);
 void _starpu_sched_component_unlock_worker(int workerid);
 
+void _starpu_sched_component_workers_destroy(void);
+
 struct _starpu_worker * _starpu_sched_component_worker_get_worker(struct starpu_sched_component *);
 struct _starpu_combined_worker * _starpu_sched_component_combined_worker_get_combined_worker(struct starpu_sched_component * worker_component);