public inbox for libc-alpha@sourceware.org
 help / color / mirror / Atom feed
* [PATCH v2 1/3] y2038: Convert cnd_timedwait to support 64 bit time
@ 2020-11-03  9:14 Lukasz Majewski
  2020-11-03  9:14 ` [PATCH v2 2/3] y2038: Convert mtx_timedlock " Lukasz Majewski
                   ` (3 more replies)
  0 siblings, 4 replies; 17+ messages in thread
From: Lukasz Majewski @ 2020-11-03  9:14 UTC (permalink / raw)
  To: Joseph Myers, Paul Eggert, Adhemerval Zanella
  Cc: Alistair Francis, Arnd Bergmann, Alistair Francis, GNU C Library,
	Florian Weimer, Carlos O'Donell, Stepan Golosunov,
	Andreas Schwab, Zack Weinberg, Lukasz Majewski

The cnd_timedwait function has been converted to support 64 bit time.
It was also necessary to provide Linux specific copy of it to avoid
problems on i686-gnu (i.e. HURD) port, which is not providing
pthread_cond_timedwait() supporting 64 bit time.

The cnd_timedwait is a wrapper on POSIX threads to provide C11 standard
threads interface. It directly calls __pthread_cond_timedwait64().

Build tests:
./src/scripts/build-many-glibcs.py glibcs
---
 sysdeps/pthread/thrd_priv.h             |  8 +++++
 sysdeps/unix/sysv/linux/cnd_timedwait.c | 44 +++++++++++++++++++++++++
 2 files changed, 52 insertions(+)
 create mode 100644 sysdeps/unix/sysv/linux/cnd_timedwait.c

diff --git a/sysdeps/pthread/thrd_priv.h b/sysdeps/pthread/thrd_priv.h
index d22ad6f632..dbfec0df7a 100644
--- a/sysdeps/pthread/thrd_priv.h
+++ b/sysdeps/pthread/thrd_priv.h
@@ -24,6 +24,14 @@
 #include <errno.h>
 #include "pthreadP.h"	/* For pthread_{mutex,cond}_t definitions.  */
 
+#if __TIMESIZE == 64
+# define __cnd_timedwait64 __cnd_timedwait
+#else
+extern int __cnd_timedwait64 (cnd_t *restrict cond, mtx_t *restrict mutex,
+                              const struct __timespec64* restrict time_point);
+libpthread_hidden_proto (__cnd_timedwait64)
+#endif
+
 static __always_inline int
 thrd_err_map (int err_code)
 {
diff --git a/sysdeps/unix/sysv/linux/cnd_timedwait.c b/sysdeps/unix/sysv/linux/cnd_timedwait.c
new file mode 100644
index 0000000000..5bf5a2d968
--- /dev/null
+++ b/sysdeps/unix/sysv/linux/cnd_timedwait.c
@@ -0,0 +1,44 @@
+/* C11 threads conditional timed wait implementation - Linux variant.
+   Copyright (C) 2020 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <https://www.gnu.org/licenses/>.  */
+
+#include <time.h>
+#include "thrd_priv.h"
+
+int
+__cnd_timedwait64 (cnd_t *restrict cond, mtx_t *restrict mutex,
+                   const struct __timespec64* restrict time_point)
+{
+  int err_code = __pthread_cond_timedwait64 ((pthread_cond_t *) cond,
+                                             (pthread_mutex_t *) mutex,
+                                             time_point);
+  return thrd_err_map (err_code);
+}
+
+#if __TIMESIZE != 64
+libpthread_hidden_def (__cnd_timedwait64)
+
+int
+__cnd_timedwait (cnd_t *restrict cond, mtx_t *restrict mutex,
+                 const struct timespec* restrict time_point)
+{
+  struct __timespec64 ts64 = valid_timespec_to_timespec64 (*time_point);
+
+  return __cnd_timedwait64(cond, mutex, &ts64);
+}
+#endif
+weak_alias (__cnd_timedwait, cnd_timedwait)
-- 
2.20.1


^ permalink raw reply	[flat|nested] 17+ messages in thread
* [PATCH] shm_open/unlink: fix errno if namelen >= NAME_MAX
@ 2020-10-16 10:09 Chen Li
  2020-10-26 19:44 ` Adhemerval Zanella
  0 siblings, 1 reply; 17+ messages in thread
From: Chen Li @ 2020-10-16 10:09 UTC (permalink / raw)
  To: libc-alpha


According to linux's manpage and posix's doc, errno should be
set to ENAMETOOLONG if the path exceeds the maximuz length:

linux man page(http://man7.org/linux/man-pages/man3/shm_open.3.html)

```
ENAMETOOLONG
   The length of name exceeds PATH_MAX.
```

posix doc(https://pubs.opengroup.org/onlinepubs/009695399/functions/shm_open.html):

```
[ENAMETOOLONG]
   The length of the name argument exceeds {PATH_MAX} or a pathname component is longer than {NAME_MAX}.
```
glibc doesn't handle ENAMETOOLONG correctly previously. When the path
exceeds the maximum value, errno was set to EINVAL instead, which
doesn't conform the man page and posix standard.

This patch removes the NAME_MAX check in SHM_GET_NAME and leaves this
check to open syscall, which should handle maximunize length correctly
inside various filesystem implementations.
---
 sysdeps/posix/shm-directory.h | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/sysdeps/posix/shm-directory.h b/sysdeps/posix/shm-directory.h
index c7979ebb72..5a1aab2c14 100644
--- a/sysdeps/posix/shm-directory.h
+++ b/sysdeps/posix/shm-directory.h
@@ -53,7 +53,7 @@ extern const char *__shm_directory (size_t *len);
     ++name;								      \
   size_t namelen = strlen (name) + 1;					      \
   /* Validate the filename.  */						      \
-  if (namelen == 1 || namelen >= NAME_MAX || strchr (name, '/') != NULL)      \
+  if (namelen == 1 || strchr (name, '/') != NULL)      \
     {									      \
       __set_errno (errno_for_invalid);					      \
       return retval_for_invalid;					      \



^ permalink raw reply	[flat|nested] 17+ messages in thread

end of thread, other threads:[~2020-11-11 20:08 UTC | newest]

Thread overview: 17+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-11-03  9:14 [PATCH v2 1/3] y2038: Convert cnd_timedwait to support 64 bit time Lukasz Majewski
2020-11-03  9:14 ` [PATCH v2 2/3] y2038: Convert mtx_timedlock " Lukasz Majewski
2020-11-03 14:45   ` [PATCH] shm_open/unlink: fix errno if namelen >= NAME_MAX Chen Li
2020-11-03 16:43     ` Adhemerval Zanella
2020-11-03 16:49       ` Florian Weimer
2020-11-03 16:57         ` Adhemerval Zanella
2020-11-03 15:28   ` [PATCH v2 2/3] y2038: Convert mtx_timedlock to support 64 bit time Alistair Francis
2020-11-11 20:06   ` Adhemerval Zanella
2020-11-03  9:14 ` [PATCH v2 3/3] y2038: Convert thrd_sleep " Lukasz Majewski
2020-11-03 15:32   ` Alistair Francis
2020-11-11 20:08   ` Adhemerval Zanella
2020-11-03 15:24 ` [PATCH v2 1/3] y2038: Convert cnd_timedwait " Alistair Francis
2020-11-11 20:05 ` Adhemerval Zanella
  -- strict thread matches above, loose matches on Subject: below --
2020-10-16 10:09 [PATCH] shm_open/unlink: fix errno if namelen >= NAME_MAX Chen Li
2020-10-26 19:44 ` Adhemerval Zanella
2020-10-27 10:27   ` Florian Weimer
2020-10-27 11:53     ` Adhemerval Zanella

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).