If the vol object is newly created, it increases the volumes count,
but doesn't decrease the volumes count when do cleanup. It can
cause libvirtd crash when one trying to free the volume objects
like:
for (i = 0; i < pool->volumes.count; i++)
virStorageVolDefFree(pool->volumes.objs[i]);
It's more reliale if we add the newly created vol object in the
end.
---
src/storage/storage_backend_logical.c | 4 +++-
1 files changed, 3 insertions(+), 1 deletions(-)
diff --git a/src/storage/storage_backend_logical.c
b/src/storage/storage_backend_logical.c
index 61c89a2..1420ede 100644
--- a/src/storage/storage_backend_logical.c
+++ b/src/storage/storage_backend_logical.c
@@ -110,7 +110,6 @@ virStorageBackendLogicalMakeVol(virStoragePoolObjPtr pool,
virReportOOMError();
goto cleanup;
}
- pool->volumes.objs[pool->volumes.count++] = vol;
}
if (vol->target.path == NULL) {
@@ -254,6 +253,9 @@ virStorageBackendLogicalMakeVol(virStoragePoolObjPtr pool,
vol->source.nextent++;
}
+ if (is_new_vol)
+ pool->volumes.objs[pool->volumes.count++] = vol;
+
ret = 0;
cleanup:
--
1.7.1