Selaa lähdekoodia

Add starpu_arbiter_destroy

Samuel Thibault 10 vuotta sitten
vanhempi
commit
e618d79b17

+ 1 - 0
include/starpu_data.h

@@ -84,6 +84,7 @@ void starpu_data_release_on_node(starpu_data_handle_t handle, int node);
 typedef struct starpu_arbiter *starpu_arbiter_t;
 starpu_arbiter_t starpu_arbiter_create(void);
 void starpu_data_assign_arbiter(starpu_data_handle_t handle, starpu_arbiter_t arbiter);
+void starpu_arbiter_destroy(starpu_arbiter_t);
 
 void starpu_data_display_memory_stats();
 

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

@@ -532,3 +532,19 @@ void starpu_data_assign_arbiter(starpu_data_handle_t handle, starpu_arbiter_t ar
 	STARPU_ASSERT_MSG(!handle->busy_count, "arbiter can be assigned to handle only right after initialization");
 	handle->arbiter = arbiter;
 }
+
+void starpu_arbiter_destroy(starpu_arbiter_t arbiter)
+{
+#ifdef LOCK_OR_DELEGATE
+	_starpu_spin_lock(&arbiter->dlListLock);
+	STARPU_ASSERT(!arbiter->dlTaskListHead);
+	STARPU_ASSERT(!arbiter->working);
+	_starpu_spin_unlock(&arbiter->dlListLock);
+	_starpu_spin_destroy(&arbiter->dlListLock);
+#else /* LOCK_OR_DELEGATE */
+	STARPU_PTHREAD_MUTEX_LOCK(&arbiter->mutex);
+	STARPU_PTHREAD_MUTEX_UNLOCK(&arbiter->mutex);
+	STARPU_PTHREAD_MUTEX_DESTROY(&arbiter->mutex);
+#endif /* LOCK_OR_DELEGATE */
+	free(arbiter);
+}

+ 2 - 0
tests/datawizard/test_arbiter.cpp

@@ -201,6 +201,8 @@ out:
 	{
 		starpu_data_unregister(handleA[idxHandle]);
 	}
+	starpu_arbiter_destroy(arbiter);
+	starpu_arbiter_destroy(arbiter2);
 
 	//////////////////////////////////////////////////////
 	FPRINTF(stdout,"Shutdown\n");