Browse Source

cleanup the lists of memory requests at the termination of StarPU

Cédric Augonnet 16 years ago
parent
commit
2ad17cc384
4 changed files with 31 additions and 1 deletions
  1. 3 0
      src/core/workers.c
  2. 9 1
      src/datawizard/copy-driver.c
  3. 9 0
      src/datawizard/data_request.c
  4. 10 0
      src/datawizard/memalloc.c

+ 3 - 0
src/core/workers.c

@@ -485,4 +485,7 @@ void starpu_shutdown(void)
 
 	/* wait for their termination */
 	terminate_workers(&config);
+
+	/* cleanup StarPU internal data structures */
+	deinit_memory_nodes();
 }

+ 9 - 1
src/datawizard/copy-driver.c

@@ -125,7 +125,7 @@ void wake_all_blocked_workers(void)
 	}
 }
 
-void init_memory_nodes()
+void init_memory_nodes(void)
 {
 	/* there is no node yet, subsequent nodes will be 
 	 * added using register_memory_node */
@@ -143,6 +143,14 @@ void init_memory_nodes()
 	init_data_request_lists();
 }
 
+void deinit_memory_nodes(void)
+{
+	deinit_data_request_lists();
+	deinit_mem_chunk_lists();
+
+	pthread_key_delete(memory_node_key);
+}
+
 void set_local_memory_node_key(unsigned *node)
 {
 	pthread_setspecific(memory_node_key, node);

+ 9 - 0
src/datawizard/data_request.c

@@ -29,6 +29,15 @@ void init_data_request_lists(void)
 	}
 }
 
+void deinit_data_request_lists(void)
+{
+	unsigned i;
+	for (i = 0; i < MAXNODES; i++)
+	{
+		data_request_list_delete(data_requests[i]);
+	}
+}
+
 int post_data_request(data_state *state, uint32_t src_node, uint32_t dst_node)
 {
 	int retvalue;

+ 10 - 0
src/datawizard/memalloc.c

@@ -33,6 +33,16 @@ void init_mem_chunk_lists(void)
 	}
 }
 
+void deinit_mem_chunk_lists(void)
+{
+	unsigned i;
+	for (i = 0; i < MAXNODES; i++)
+	{
+		mem_chunk_list_delete(mc_list[i]);
+		mem_chunk_list_delete(mc_list_to_free[i]);
+	}
+}
+
 static void lock_all_subtree(data_state *data)
 {
 	if (data->nchildren == 0)