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

S.Çağlar Onur caglar at 10ur.org
Thu Dec 4 17:31:12 UTC 2014


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.

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>


More information about the lxc-devel mailing list