Discussion:
new snapshot available: coreutils-8.26.57-00381
(too old to reply)
Pádraig Brady
2017-03-03 05:57:47 UTC
Permalink
Raw Message
-> gnulib


-------- Forwarded Message --------
Subject: Re: new snapshot available: coreutils-8.26.57-00381
Date: Thu, 2 Mar 2017 23:59:37 -0500
From: Assaf Gordon <***@gmail.com>
To: Pádraig Brady <***@draigBrady.com>
CC: Coreutils <***@gnu.org>

Hello Pádraig and all,
https://pixelbeat.org/cu/coreutils-ss.tar.xz
From a cursory look, I see two failures that might be new:

First,
on various Mac OS X, the gnulib test 'test-lock' fails with exit code 134 (SIGABRT?)
(But no coreutils test failures):
Log here:
https://pretest.housegordon.org/g/4461/logs/test-suite.0.log?inlined=1
I think there was a recent change with it, here:
https://lists.gnu.org/archive/html/bug-gnulib/2017-01/msg00046.html

No test failures on the following:

...
FreeBSD 10.1-RELEASE (amd64)
FreeBSD 10.3-RELEASE (amd64)
FreeBSD 11.0-RELEASE-p1 (amd64)
FreeBSD 9.3-RELEASE (amd64)
OpenBSD 5.8 (amd64)
OpenBSD 6.0 (amd64)
kFreeBSD 9.0-2-amd64/Debian 7.8 (x86_64)
...

regards,
- assaf
Bruno Haible
2017-03-03 11:15:02 UTC
Permalink
Raw Message
Post by Pádraig Brady
on various Mac OS X, the gnulib test 'test-lock' fails with exit code 134 (SIGABRT?)
Fixed as follows:


2017-03-03 Bruno Haible <***@clisp.org>

lock tests: Fix test failure on Mac OS X (regression from 2017-01-05).
Reported by Assaf Gordon <***@gmail.com> via
Pádraig Brady <***@draigBrady.com>.
* tests/test-lock.c: On Mac OS X, use named semaphores, not unnamed
semaphores.
(USE_NAMED_SEMAPHORE, USE_UNNAMED_SEMAPHORE): New macros.
(atomic_int_semaphore): New macro.

diff --git a/tests/test-lock.c b/tests/test-lock.c
index c6bc399..fb18dee 100644
--- a/tests/test-lock.c
+++ b/tests/test-lock.c
@@ -63,6 +63,13 @@
If set to 0, a lock is used. If set to 1, a semaphore is used.
Uncomment this to reduce the dependencies of this test. */
# define USE_SEMAPHORE 1
+/* Mac OS X provides only named semaphores (sem_open); its facility for
+ unnamed semaphores (sem_init) does not work. */
+# if defined __APPLE__ && defined __MACH__
+# define USE_NAMED_SEMAPHORE 1
+# else
+# define USE_UNNAMED_SEMAPHORE 1
+# endif
#endif

/* Whether to print debugging messages. */
@@ -107,7 +114,9 @@
#include "glthread/yield.h"
#if USE_SEMAPHORE
# include <errno.h>
+# include <fcntl.h>
# include <semaphore.h>
+# include <unistd.h>
#endif

#if ENABLE_DEBUGGING
@@ -143,20 +152,66 @@ set_atomic_int_value (struct atomic_int *ai, int new_value)
#elif USE_SEMAPHORE
/* This atomic_int implementation can only support the values 0 and 1.
It is initially 0 and can be set to 1 only once. */
+# if USE_UNNAMED_SEMAPHORE
struct atomic_int {
sem_t semaphore;
};
+#define atomic_int_semaphore(ai) (&(ai)->semaphore)
static void
init_atomic_int (struct atomic_int *ai)
{
sem_init (&ai->semaphore, 0, 0);
}
+# endif
+# if USE_NAMED_SEMAPHORE
+struct atomic_int {
+ sem_t *semaphore;
+};
+#define atomic_int_semaphore(ai) ((ai)->semaphore)
+static void
+init_atomic_int (struct atomic_int *ai)
+{
+ sem_t *s;
+ unsigned int count;
+ for (count = 0; ; count++)
+ {
+ char name[80];
+ /* Use getpid() in the name, so that different processes running at the
+ same time will not interfere. Use ai in the name, so that different
+ atomic_int in the same process will not interfere. Use a count in
+ the name, so that even in the (unlikely) case that a semaphore with
+ the specified name already exists, we can try a different name. */
+ sprintf (name, "test-lock-%lu-%p-%u",
+ (unsigned long) getpid (), ai, count);
+ s = sem_open (name, O_CREAT | O_EXCL, 0600, 0);
+ if (s == SEM_FAILED)
+ {
+ if (errno == EEXIST)
+ /* Retry with a different name. */
+ continue;
+ else
+ {
+ perror ("sem_open failed");
+ abort ();
+ }
+ }
+ else
+ {
+ /* Try not to leave a semaphore hanging around on the file system
+ eternally, if we can avoid it. */
+ sem_unlink (name);
+ break;
+ }
+ }
+ ai->semaphore = s;
+}
+# endif
static int
get_atomic_int_value (struct atomic_int *ai)
{
- if (sem_trywait (&ai->semaphore) == 0)
+ if (sem_trywait (atomic_int_semaphore (ai)) == 0)
{
- if (sem_post (&ai->semaphore))
+ if (sem_post (atomic_int_semaphore (ai)))
abort ();
return 1;
}
@@ -172,7 +227,7 @@ set_atomic_int_value (struct atomic_int *ai, int new_value)
/* It's already initialized with 0. */
return;
/* To set the value 1: */
- if (sem_post (&ai->semaphore))
+ if (sem_post (atomic_int_semaphore (ai)))
abort ();
}
#else
Bruno Haible
2017-03-03 11:49:41 UTC
Permalink
Raw Message
Let me also update the doc. The factual infos come from
https://heldercorreia.com/semaphores-in-mac-os-x-fd7a7418e13b#.vshlwqkfe


2017-03-03 Bruno Haible <***@clisp.org>

doc: Mention Mac OS X deficiencies regarding semaphores.
* doc/posix-functions/sem_init.texi: Mention status on Mac OS X.
* doc/posix-functions/sem_destroy.texi: Likewise.
* doc/posix-functions/sem_getvalue.texi: Likewise.

diff --git a/doc/posix-functions/sem_destroy.texi b/doc/posix-functions/sem_destroy.texi
index 31f2b75..380fb62 100644
--- a/doc/posix-functions/sem_destroy.texi
+++ b/doc/posix-functions/sem_destroy.texi
@@ -15,4 +15,7 @@ Portability problems not fixed by Gnulib:
@item
This function is missing on some platforms:
Minix 3.1.8, IRIX 5.3, Solaris 2.4, mingw, MSVC 9, BeOS.
+@item
+This function is not implemented on some platforms:
+Mac OS X 10.11.
@end itemize
diff --git a/doc/posix-functions/sem_getvalue.texi b/doc/posix-functions/sem_getvalue.texi
index b2baa9e..a00dea5 100644
--- a/doc/posix-functions/sem_getvalue.texi
+++ b/doc/posix-functions/sem_getvalue.texi
@@ -15,4 +15,7 @@ Portability problems not fixed by Gnulib:
@item
This function is missing on some platforms:
Minix 3.1.8, IRIX 5.3, Solaris 2.4, mingw, MSVC 9, BeOS.
+@item
+This function is not implemented on some platforms:
+Mac OS X 10.11.
@end itemize
diff --git a/doc/posix-functions/sem_init.texi b/doc/posix-functions/sem_init.texi
index c52da75..24adc41 100644
--- a/doc/posix-functions/sem_init.texi
+++ b/doc/posix-functions/sem_init.texi
@@ -15,4 +15,7 @@ Portability problems not fixed by Gnulib:
@item
This function is missing on some platforms:
Minix 3.1.8, IRIX 5.3, Solaris 2.4, mingw, MSVC 9, BeOS.
+@item
+This function is not implemented on some platforms:
+Mac OS X 10.11.
@end itemize
Pádraig Brady
2017-03-03 17:34:27 UTC
Permalink
Raw Message
Post by Bruno Haible
Post by Pádraig Brady
on various Mac OS X, the gnulib test 'test-lock' fails with exit code 134 (SIGABRT?)
lock tests: Fix test failure on Mac OS X (regression from 2017-01-05).
* tests/test-lock.c: On Mac OS X, use named semaphores, not unnamed
semaphores.
(USE_NAMED_SEMAPHORE, USE_UNNAMED_SEMAPHORE): New macros.
(atomic_int_semaphore): New macro.
Excellent. I've released a new coreutils snapshot with that:
https://lists.gnu.org/archive/html/coreutils/2017-03/msg00009.html

thanks!
Pádraig.

Loading...