|
@@ -421,6 +421,7 @@ int _starpu_data_handle_init(starpu_data_handle_t handle, struct starpu_data_int
|
|
|
* starpu_data_unregister is actually safe */
|
|
|
STARPU_HG_DISABLE_CHECKING(handle->busy_count);
|
|
|
|
|
|
+ handle->magic = 42;
|
|
|
handle->ops = interface_ops;
|
|
|
handle->mf_node = mf_node;
|
|
|
handle->mpi_data = NULL;
|
|
@@ -671,6 +672,8 @@ static void _starpu_data_unregister_fetch_data_callback(void *_arg)
|
|
|
static void _starpu_data_unregister(starpu_data_handle_t handle, unsigned coherent, unsigned nowait)
|
|
|
{
|
|
|
STARPU_ASSERT(handle);
|
|
|
+ /* Prevent any further unregistration */
|
|
|
+ handle->magic = 0;
|
|
|
STARPU_ASSERT_MSG(handle->nchildren == 0, "data %p needs to be unpartitioned before unregistration", handle);
|
|
|
STARPU_ASSERT_MSG(handle->nplans == 0, "data %p needs its partition plans to be cleaned before unregistration", handle);
|
|
|
STARPU_ASSERT_MSG(handle->partitioned == 0, "data %p needs its partitioned plans to be unpartitioned before unregistration", handle);
|
|
@@ -870,6 +873,7 @@ retry_busy:
|
|
|
|
|
|
void starpu_data_unregister(starpu_data_handle_t handle)
|
|
|
{
|
|
|
+ STARPU_ASSERT_MSG(handle->magic == 42, "data %p is invalid (was it already registered?)", handle);
|
|
|
STARPU_ASSERT_MSG(!handle->lazy_unregister, "data %p can not be unregistered twice", handle);
|
|
|
|
|
|
if (handle->unregister_hook)
|
|
@@ -882,6 +886,7 @@ void starpu_data_unregister(starpu_data_handle_t handle)
|
|
|
|
|
|
void starpu_data_unregister_no_coherency(starpu_data_handle_t handle)
|
|
|
{
|
|
|
+ STARPU_ASSERT_MSG(handle->magic == 42, "data %p is invalid (was it already registered?)", handle);
|
|
|
if (handle->unregister_hook)
|
|
|
{
|
|
|
handle->unregister_hook(handle);
|
|
@@ -907,6 +912,7 @@ static void _starpu_data_unregister_submit_cb(void *arg)
|
|
|
|
|
|
void starpu_data_unregister_submit(starpu_data_handle_t handle)
|
|
|
{
|
|
|
+ STARPU_ASSERT_MSG(handle->magic == 42, "data %p is invalid (was it already registered?)", handle);
|
|
|
STARPU_ASSERT_MSG(!handle->lazy_unregister, "data %p can not be unregistered twice", handle);
|
|
|
|
|
|
if (handle->unregister_hook)
|