On 10/29/2015 05:21 AM, John Ferlan wrote:
On 10/28/2015 03:06 AM, Luyao Huang wrote:
virCgroupRemove use VIR_ERROR to log the error and won't
change the virLastErr in the thread, so no need do this.
Signed-off-by: Luyao Huang <lhuang@xxxxxxxxxx>
---
src/util/vircgroup.c | 10 ----------
1 file changed, 10 deletions(-)
Although virCgroupRemove calls virCgroupRemoveRecursively to remove the
cgroups and as noted in the recursive function the usage of VIR_ERROR
instead of virReportError is true.
However, virCgroupRemove also calls virCgroupPathOfController which
calls virReport[System]Error so I don't think we can 'remove' these
overwrite protections... Consider the case when the recursive function
is never called because we keep continuing.
You're right, i just check virCgroupRemoveRecursively() , and
virCgroupPathOfController() calls virReport[System]Error. Then i think
we need avoid the error overwrite when call virCgroupPathOfController()
in virCgroupRemove(). Like this:
diff --git a/src/util/vircgroup.c b/src/util/vircgroup.c
index 0379c2e..3ba6da3 100644
--- a/src/util/vircgroup.c
+++ b/src/util/vircgroup.c
@@ -3524,15 +3524,20 @@ virCgroupRemove(virCgroupPtr group)
if (STREQ(group->controllers[i].placement, "/"))
continue;
+ virErrorPtr saved = virSaveLastError();
if (virCgroupPathOfController(group,
i,
NULL,
- &grppath) != 0)
+ &grppath) != 0) {
+ virSetError(saved);
+ virFreeError(saved);
continue;
+ }
VIR_DEBUG("Removing cgroup %s and all child cgroups", grppath);
rc = virCgroupRemoveRecursively(grppath);
VIR_FREE(grppath);
+ virFreeError(saved);
}
VIR_DEBUG("Done removing cgroup %s", group->path);
Since we just skip remove the current cgroup if
virCgroupPathOfController get failure, and return rc at last.So i think
we really don't care about the error in virCgroupPathOfController in
this place , and we should add some codes to avoid the error overwrite here.
Thanks a lot for your review and help.
Luyao
John
diff --git a/src/util/vircgroup.c b/src/util/vircgroup.c
index 0379c2e..a120a15 100644
--- a/src/util/vircgroup.c
+++ b/src/util/vircgroup.c
@@ -1670,13 +1670,8 @@ virCgroupNewMachineSystemd(const char *name,
}
if (virCgroupAddTask(*group, pidleader) < 0) {
- virErrorPtr saved = virSaveLastError();
virCgroupRemove(*group);
virCgroupFree(group);
- if (saved) {
- virSetError(saved);
- virFreeError(saved);
- }
}
ret = 0;
@@ -1728,13 +1723,8 @@ virCgroupNewMachineManual(const char *name,
goto cleanup;
if (virCgroupAddTask(*group, pidleader) < 0) {
- virErrorPtr saved = virSaveLastError();
virCgroupRemove(*group);
virCgroupFree(group);
- if (saved) {
- virSetError(saved);
- virFreeError(saved);
- }
}
done:
--
libvir-list mailing list
libvir-list@xxxxxxxxxx
https://www.redhat.com/mailman/listinfo/libvir-list