[libvirt] [PATCH 2/3] Convert the virCgroupKill* APIs to report errors
Daniel P. Berrange
berrange at redhat.com
Fri Jul 19 14:42:31 UTC 2013
On Thu, Jul 18, 2013 at 09:36:59PM -0600, Eric Blake wrote:
> On 07/18/2013 09:00 AM, Daniel P. Berrange wrote:
> > From: "Daniel P. Berrange" <berrange at redhat.com>
> >
> > Instead of returning errno values, change the virCgroupKill*
> > APIs to fully report errors.
> >
> > Signed-off-by: Daniel P. Berrange <berrange at redhat.com>
> > ---
> > src/lxc/lxc_process.c | 15 +------
> > src/util/vircgroup.c | 108 ++++++++++++++++++++++++++++----------------------
> > 2 files changed, 62 insertions(+), 61 deletions(-)
> >
>
> > +++ b/src/lxc/lxc_process.c
> > @@ -769,19 +769,7 @@ int virLXCProcessStop(virLXCDriverPtr driver,
> > }
> >
> > if (priv->cgroup) {
> > - rc = virCgroupKillPainfully(priv->cgroup);
> > - if (rc < 0) {
> > - virReportSystemError(-rc, "%s",
> > - _("Failed to kill container PIDs"));
> > - rc = -1;
> > - goto cleanup;
> > - }
> > - if (rc == 1) {
> > - virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
> > - _("Some container PIDs refused to die"));
>
> So we previously reported -errno or +1 for two different types of failure...
>
> > - rc = -1;
> > - goto cleanup;
> > - }
> > + virCgroupKillPainfully(priv->cgroup);
>
> ...but now don't report any failure at all. Is this right? Shouldn't
> this be:
>
> if (virCgroupKillPainfully(priv->cgroup) < 0)
> goto cleanup;
>
> or even still distinguish the error message for processes that couldn't
> be killed (but maybe hoisting it into vircgroup.c)?
I'll add in
- virCgroupKillPainfully(priv->cgroup);
+ rc = virCgroupKillPainfully(priv->cgroup);
+ if (rc < 0)
+ return -1;
+ if (rc > 0) {
+ virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
+ _("Some processes refused to die"));
+ return -1;
+ }
> > + ret = virCgroupKillRecursive(group, signum);
> > + VIR_DEBUG("Iteration %zu rc=%d", i, ret);
> > + /* If ret == -1 we hit error, if 0 we ran out of PIDs */
> > + if (ret <= 0)
> > break;
> >
> > usleep(200 * 1000);
> > }
> > - VIR_DEBUG("Complete %d", rc);
> > - return rc;
> > + VIR_DEBUG("Complete %d", ret);
> > + return ret;
>
> Here, you can still return 1 without reporting any error, if you timed out.
Yep, I want to leave it upto the callers to decide if it is an error
condition.
Daniel
--
|: http://berrange.com -o- http://www.flickr.com/photos/dberrange/ :|
|: http://libvirt.org -o- http://virt-manager.org :|
|: http://autobuild.org -o- http://search.cpan.org/~danberr/ :|
|: http://entangle-photo.org -o- http://live.gnome.org/gtk-vnc :|
More information about the libvir-list
mailing list