Przeglądaj źródła

Fix memory leak when fxt is enabled

Samuel Thibault 10 lat temu
rodzic
commit
3e1e661265

+ 16 - 0
src/core/dependencies/implicit_data_deps.c

@@ -586,3 +586,19 @@ int _starpu_data_wait_until_available(starpu_data_handle_t handle, enum starpu_d
 
 	return 0;
 }
+
+/* This data is about to be freed, clean our stuff */
+void _starpu_data_clear_implicit(starpu_data_handle_t handle)
+{
+	struct _starpu_jobid_list *list;
+
+	STARPU_PTHREAD_MUTEX_LOCK(&handle->sequential_consistency_mutex);
+	list = handle->last_submitted_ghost_accessors_id;
+	while (list)
+	{
+		struct _starpu_jobid_list *next = list->next;
+		free(list);
+		list = next;
+	}
+	STARPU_PTHREAD_MUTEX_UNLOCK(&handle->sequential_consistency_mutex);
+}

+ 2 - 1
src/core/dependencies/implicit_data_deps.h

@@ -1,6 +1,6 @@
 /* StarPU --- Runtime system for heterogeneous multicore architectures.
  *
- * Copyright (C) 2010, 2012, 2014  Université de Bordeaux
+ * Copyright (C) 2010, 2012, 2014-2015  Université de Bordeaux
  * Copyright (C) 2010, 2011  CNRS
  *
  * StarPU is free software; you can redistribute it and/or modify
@@ -33,5 +33,6 @@ void _starpu_unlock_post_sync_tasks(starpu_data_handle_t handle);
 /* This function blocks until the handle is available in the requested mode */
 int _starpu_data_wait_until_available(starpu_data_handle_t handle, enum starpu_data_access_mode mode, const char *sync_name);
 
+void _starpu_data_clear_implicit(starpu_data_handle_t handle);
 #endif // __IMPLICIT_DATA_DEPS_H__
 

+ 2 - 0
src/datawizard/interfaces/data_interface.c

@@ -809,6 +809,8 @@ static void _starpu_data_unregister(starpu_data_handle_t handle, unsigned cohere
 	_starpu_spin_unlock(&handle->header_lock);
 	_starpu_spin_destroy(&handle->header_lock);
 
+	_starpu_data_clear_implicit(handle);
+
 	STARPU_PTHREAD_MUTEX_DESTROY(&handle->busy_mutex);
 	STARPU_PTHREAD_COND_DESTROY(&handle->busy_cond);
 	STARPU_PTHREAD_MUTEX_DESTROY(&handle->sequential_consistency_mutex);