[lxc-devel] [PATCH] tests: try again when waitpid() sets errno as EINTR

Stéphane Graber stgraber at ubuntu.com
Thu Dec 4 17:49:13 UTC 2014


On Thu, Dec 04, 2014 at 12:31:12PM -0500, S.Çağlar Onur wrote:
> On Thu, Dec 4, 2014 at 11:47 AM, Stéphane Graber <stgraber at ubuntu.com> wrote:
> > On Thu, Dec 04, 2014 at 02:26:04PM +0530, Arjun Sreedharan wrote:
> >> when waitpid() is interrupted, errno is not set to the negative
> >> value -EINTR. It is set to EINTR. check against EINTR.
> >>
> >> Signed-off-by: Arjun Sreedharan <arjun024 at gmail.com>
> >
> > Acked-by: Stéphane Graber <stgraber at ubuntu.com>
> 
> hmm nice catch, I believe we need following too as rmdir and
> lxc_unpriv returns non-negative error codes as well.

Indeed, looks good to me. Can you submit that as a patch?

Thanks

> 
> diff --git a/src/lxc/bdev.c b/src/lxc/bdev.c
> index 9ccd666..9d0a735 100644
> --- a/src/lxc/bdev.c
> +++ b/src/lxc/bdev.c
> @@ -1418,7 +1418,7 @@ static int btrfs_snapshot(const char *orig,
> const char *new)
>                 goto out;
>         }
>         // make sure the directory doesn't already exist
> -       if (rmdir(newfull) < 0 && errno != -ENOENT) {
> +       if (rmdir(newfull) < 0 && errno != ENOENT) {
>                 SYSERROR("Error removing empty new rootfs");
>                 goto out;
>         }
> @@ -1511,7 +1511,7 @@ static int btrfs_clonepaths(struct bdev *orig,
> struct bdev *new, const char *old
>                 return userns_exec_1(conf, btrfs_snapshot_wrapper, &sdata);
>         }
> 
> -       if (rmdir(new->dest) < 0 && errno != -ENOENT) {
> +       if (rmdir(new->dest) < 0 && errno != ENOENT) {
>                 SYSERROR("removing %s", new->dest);
>                 return -1;
>         }
> diff --git a/src/lxc/log.c b/src/lxc/log.c
> index cb48600..13bd0e8 100644
> --- a/src/lxc/log.c
> +++ b/src/lxc/log.c
> @@ -159,7 +159,7 @@ static int build_dir(const char *name)
>                 *p = '\0';
>                 if (access(n, F_OK)) {
>                         ret = lxc_unpriv(mkdir(n, 0755));
> -                       if (ret && errno != -EEXIST) {
> +                       if (ret && errno != EEXIST) {
>                                 SYSERROR("failed to create directory '%s'.", n);
>                                 free(n);
>                                 return -1;
> 
> >> ---
> >>  src/tests/containertests.c |    4 ++--
> >>  src/tests/destroytest.c    |    2 +-
> >>  src/tests/saveconfig.c     |    2 +-
> >>  src/tests/startone.c       |    4 ++--
> >>  4 files changed, 6 insertions(+), 6 deletions(-)
> >>
> >> diff --git a/src/tests/containertests.c b/src/tests/containertests.c
> >> index 9230853..d093a02 100644
> >> --- a/src/tests/containertests.c
> >> +++ b/src/tests/containertests.c
> >> @@ -48,7 +48,7 @@ static int destroy_busybox(void)
> >>  again:
> >>       ret = waitpid(pid, &status, 0);
> >>       if (ret == -1) {
> >> -             if (errno == -EINTR)
> >> +             if (errno == EINTR)
> >>                       goto again;
> >>               perror("waitpid");
> >>               return -1;
> >> @@ -80,7 +80,7 @@ static int create_busybox(void)
> >>  again:
> >>       ret = waitpid(pid, &status, 0);
> >>       if (ret == -1) {
> >> -             if (errno == -EINTR)
> >> +             if (errno == EINTR)
> >>                       goto again;
> >>               perror("waitpid");
> >>               return -1;
> >> diff --git a/src/tests/destroytest.c b/src/tests/destroytest.c
> >> index 4bb6aae..eaf3c84 100644
> >> --- a/src/tests/destroytest.c
> >> +++ b/src/tests/destroytest.c
> >> @@ -46,7 +46,7 @@ static int create_container(void)
> >>  again:
> >>       ret = waitpid(pid, &status, 0);
> >>       if (ret == -1) {
> >> -             if (errno == -EINTR)
> >> +             if (errno == EINTR)
> >>                       goto again;
> >>               perror("waitpid");
> >>               return -1;
> >> diff --git a/src/tests/saveconfig.c b/src/tests/saveconfig.c
> >> index de2fa82..d8a4ca2 100644
> >> --- a/src/tests/saveconfig.c
> >> +++ b/src/tests/saveconfig.c
> >> @@ -46,7 +46,7 @@ static int create_container(void)
> >>  again:
> >>       ret = waitpid(pid, &status, 0);
> >>       if (ret == -1) {
> >> -             if (errno == -EINTR)
> >> +             if (errno == EINTR)
> >>                       goto again;
> >>               perror("waitpid");
> >>               return -1;
> >> diff --git a/src/tests/startone.c b/src/tests/startone.c
> >> index 9dd4ec3..6b7344f 100644
> >> --- a/src/tests/startone.c
> >> +++ b/src/tests/startone.c
> >> @@ -48,7 +48,7 @@ static int destroy_container(void)
> >>  again:
> >>       ret = waitpid(pid, &status, 0);
> >>       if (ret == -1) {
> >> -             if (errno == -EINTR)
> >> +             if (errno == EINTR)
> >>                       goto again;
> >>               perror("waitpid");
> >>               return -1;
> >> @@ -80,7 +80,7 @@ static int create_container(void)
> >>  again:
> >>       ret = waitpid(pid, &status, 0);
> >>       if (ret == -1) {
> >> -             if (errno == -EINTR)
> >> +             if (errno == EINTR)
> >>                       goto again;
> >>               perror("waitpid");
> >>               return -1;
> >> --
> >> 1.7.10.1
> >>
> >
> > --
> > Stéphane Graber
> > Ubuntu developer
> > http://www.ubuntu.com
> >
> > _______________________________________________
> > lxc-devel mailing list
> > lxc-devel at lists.linuxcontainers.org
> > http://lists.linuxcontainers.org/listinfo/lxc-devel
> >
> 
> 
> 
> -- 
> S.Çağlar Onur <caglar at 10ur.org>
> _______________________________________________
> lxc-devel mailing list
> lxc-devel at lists.linuxcontainers.org
> http://lists.linuxcontainers.org/listinfo/lxc-devel

-- 
Stéphane Graber
Ubuntu developer
http://www.ubuntu.com
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 819 bytes
Desc: Digital signature
URL: <http://lists.linuxcontainers.org/pipermail/lxc-devel/attachments/20141204/9fae2000/attachment.sig>


More information about the lxc-devel mailing list