[lxc-devel] [PATCH] fix checking hook script exit code

Dwight Engen dwight.engen at oracle.com
Fri Apr 12 21:26:33 UTC 2013


On Fri, 12 Apr 2013 15:36:03 -0500
Serge Hallyn <serge.hallyn at ubuntu.com> wrote:

> Quoting Dwight Engen (dwight.engen at oracle.com):
> > pclose returns the exit status from wait, we need to check that to
> > see if the script itself failed or not. Tested a script that
> > returned 0, 1, and also one that did a sleep and then was killed by
> > a signal (abnormal termination).
> > 
> > Signed-off-by: Dwight Engen <dwight.engen at oracle.com>
> > ---
> >  src/lxc/conf.c | 7 +++++--
> >  1 file changed, 5 insertions(+), 2 deletions(-)
> > 
> > diff --git a/src/lxc/conf.c b/src/lxc/conf.c
> > index 6b3f318..07529da 100644
> > --- a/src/lxc/conf.c
> > +++ b/src/lxc/conf.c
> > @@ -299,6 +299,7 @@ static int run_buffer(char *buffer)
> >  {
> >  	FILE *f;
> >  	char *output;
> > +	int ret;
> >  
> >  	f = popen(buffer, "r");
> >  	if (!f) {
> > @@ -317,8 +318,10 @@ static int run_buffer(char *buffer)
> >  
> >  	free(output);
> >  
> > -	if (pclose(f) == -1) {
> > -		SYSERROR("Script exited on error");
> > +	ret = pclose(f);
> > +	if (ret < 0 || !WIFEXITED(ret) || WEXITSTATUS(ret) != 0) {
> > +		SYSERROR("Script exited:%snormally with:%d",
> > +			 WIFEXITED(ret) ? "" : "ab",
> > WEXITSTATUS(ret));
> 
> I don't know pclose all that well...  but the manpage says
>        The pclose() function returns -1 if wait4(2) returns an error,
> or some  other  error  is detected.
> 
> You're treating it as though it contains the status filled in
> by wait4 et al.  Is that valid?
> 
> not nack'ing, just not clear on what we can do with ret :)

Yes RETURN VALUE section of the man page confused me as well upon
first reading :) Then I found this

https://groups.google.com/forum/?fromgroups=#!topic/utah-c/g4MpZVnJ7es

which was helpful, but more importantly I did some testing with it
to make sure it actually was the wait status. I did this by writing a
pre-start hook script that returned different values and verified
what I saw in the lxc log (which is why I added to that SYSERROR).

I then read the full pclose man page and at the end of the DESCRIPTION
section it says "The  pclose()  function  waits  for the associated
process to terminate and returns the exit status of the command as
returned by wait4(2)." so I'm pretty sure it does intend to return the
exit status as opposed to code.

> >  		return -1;
> >  	}
> >  
> > -- 
> > 1.7.12.3
> > 
> > 
> > ------------------------------------------------------------------------------
> > Precog is a next-generation analytics platform capable of advanced
> > analytics on semi-structured data. The platform includes APIs for
> > building apps and a phenomenal toolset for data science. Developers
> > can use our toolset for easy data analysis & visualization. Get a
> > free account!
> > http://www2.precog.com/precogplatform/slashdotnewsletter
> > _______________________________________________ Lxc-devel mailing
> > list Lxc-devel at lists.sourceforge.net
> > https://lists.sourceforge.net/lists/listinfo/lxc-devel





More information about the lxc-devel mailing list