Explorar o código

free data outside critical section

Samuel Thibault %!s(int64=10) %!d(string=hai) anos
pai
achega
3b766361ce
Modificáronse 2 ficheiros con 6 adicións e 2 borrados
  1. 4 1
      src/datawizard/filters.c
  2. 2 1
      src/datawizard/interfaces/data_interface.c

+ 4 - 1
src/datawizard/filters.c

@@ -437,12 +437,15 @@ void starpu_data_unpartition(starpu_data_handle_t root_handle, unsigned gatherin
 	}
 
 	/* there is no child anymore */
-	free(root_handle->children);
+	starpu_data_handle_t children = root_handle->children;
 	root_handle->children = NULL;
 	root_handle->nchildren = 0;
 
 	/* now the parent may be used again so we release the lock */
 	_starpu_spin_unlock(&root_handle->header_lock);
+
+	free(children);
+
 	_STARPU_TRACE_END_UNPARTITION(root_handle, gathering_node);
 }
 

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

@@ -499,9 +499,10 @@ int _starpu_data_release_tag(starpu_data_handle_t handle)
 		STARPU_ASSERT_MSG((tag_entry != NULL),"Data handle %p with tag %d isn't in the hashmap !",handle,handle->tag);
 
 		HASH_DEL(registered_tag_handles, tag_entry);
-		free(tag_entry);
 
 		_starpu_spin_unlock(&registered_tag_handles_lock);
+
+		free(tag_entry);
 	}
 	return 0;
 }