[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