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(a)redhat.com>
> ---
> 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:
>