瀏覽代碼

src/core/disk.c: fix _starpu_disk_unregister when no disk has been registered

Nathalie Furmento 7 年之前
父節點
當前提交
c7839a8220
共有 1 個文件被更改,包括 22 次插入19 次删除
  1. 22 19
      src/core/disk.c

+ 22 - 19
src/core/disk.c

@@ -61,7 +61,7 @@ int starpu_disk_swap_node = -1;
 static void add_async_event(struct _starpu_async_channel * channel, void * event)
 {
         if (!event)
-                return; 
+                return;
 
         if (channel->event.disk_event.requests == NULL)
         {
@@ -99,7 +99,7 @@ int starpu_disk_register(struct starpu_disk_ops *func, void *parameter, starpu_s
 		_starpu_memory_node_add_nworkers(disk_memnode);
 		_starpu_worker_drives_memory_node(workerarg, disk_memnode);
 	}
-	
+
 	//Add bus for disk <-> disk copy
 	if (func->copy != NULL && disk_register_list != NULL)
 	{
@@ -137,28 +137,31 @@ int starpu_disk_register(struct starpu_disk_ops *func, void *parameter, starpu_s
 
 void _starpu_disk_unregister(void)
 {
-	int i;
-
-	/* search disk and delete it */
-	for (i = 0; i < size_register_list; ++i)
+	if (disk_register_list)
 	{
-		if (disk_register_list[i] == NULL)
-			continue;
+		int i;
 
-		_starpu_set_disk_flag(disk_register_list[i]->node, STARPU_DISK_NO_RECLAIM);
-		_starpu_free_all_automatically_allocated_buffers(disk_register_list[i]->node);
+		/* search disk and delete it */
+		for (i = 0; i < size_register_list; ++i)
+		{
+			if (disk_register_list[i] == NULL)
+				continue;
 
-		/* don't forget to unplug */
-		disk_register_list[i]->functions->unplug(disk_register_list[i]->base);
-		free(disk_register_list[i]);
-		disk_register_list[i] = NULL;
+			_starpu_set_disk_flag(disk_register_list[i]->node, STARPU_DISK_NO_RECLAIM);
+			_starpu_free_all_automatically_allocated_buffers(disk_register_list[i]->node);
 
-		disk_number--;
-	}
+			/* don't forget to unplug */
+			disk_register_list[i]->functions->unplug(disk_register_list[i]->base);
+			free(disk_register_list[i]);
+			disk_register_list[i] = NULL;
+
+			disk_number--;
+		}
 
-	/* no disk in the list -> delete the list */
-	free(disk_register_list);
-	disk_register_list = NULL;
+		/* no disk in the list -> delete the list */
+		free(disk_register_list);
+		disk_register_list = NULL;
+	}
 
 	STARPU_ASSERT_MSG(disk_number == 0, "Some disks are not unregistered !");
 }