From d2e26d328a7d8c902061545825ff905db38a1931 Mon Sep 17 00:00:00 2001 From: GNU Libc Maintainers Date: Tue, 27 May 2025 11:40:04 +0100 Subject: [PATCH] git-sem-open Submitted for 2.33 commit 257e4e7b576d54ab943d73dcda64c9a62c15b907 Author: Samuel Thibault Date: Sun Dec 13 15:20:32 2020 +0000 htl: Get sem_open/sem_close/sem_unlink support This just moves the existing nptl implementation to reuse as it is in htl. Gbp-Pq: Topic hurd-i386 Gbp-Pq: Name git-sem-open.diff --- htl/Makefile | 4 +-- htl/semaphoreP.h | 49 ++++++++++++++++++++++++++ sysdeps/htl/sem-close.c | 31 ---------------- sysdeps/htl/sem-open.c | 31 ---------------- sysdeps/htl/sem-unlink.c | 31 ---------------- {nptl => sysdeps/pthread}/sem_close.c | 0 {nptl => sysdeps/pthread}/sem_open.c | 0 {nptl => sysdeps/pthread}/sem_unlink.c | 0 8 files changed, 51 insertions(+), 95 deletions(-) create mode 100644 htl/semaphoreP.h delete mode 100644 sysdeps/htl/sem-close.c delete mode 100644 sysdeps/htl/sem-open.c delete mode 100644 sysdeps/htl/sem-unlink.c rename {nptl => sysdeps/pthread}/sem_close.c (100%) rename {nptl => sysdeps/pthread}/sem_open.c (100%) rename {nptl => sysdeps/pthread}/sem_unlink.c (100%) diff --git a/htl/Makefile b/htl/Makefile index 28b4a35a7..da6b4611a 100644 --- a/htl/Makefile +++ b/htl/Makefile @@ -129,8 +129,8 @@ libpthread-routines := pt-attr pt-attr-destroy pt-attr-getdetachstate \ pt-getschedparam pt-setschedparam pt-setschedprio \ pt-yield \ \ - sem-close sem-destroy sem-getvalue sem-init sem-open \ - sem-post sem-timedwait sem-trywait sem-unlink \ + sem_close sem-destroy sem-getvalue sem-init sem_open \ + sem-post sem-timedwait sem-trywait sem_unlink \ sem-wait sem-waitfast \ \ shm-directory \ diff --git a/htl/semaphoreP.h b/htl/semaphoreP.h new file mode 100644 index 000000000..22732122b --- /dev/null +++ b/htl/semaphoreP.h @@ -0,0 +1,49 @@ +/* Copyright (C) 2002-2020 Free Software Foundation, Inc. + This file is part of the GNU C Library. + Contributed by Ulrich Drepper , 2002. + + 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 + . */ + +#include +#include "pt-internal.h" + +#define SEM_SHM_PREFIX "sem." + +/* Keeping track of currently used mappings. */ +struct inuse_sem +{ + dev_t dev; + ino_t ino; + int refcnt; + sem_t *sem; + char name[0]; +}; + + +/* The search tree for existing mappings. */ +extern void *__sem_mappings attribute_hidden; + +/* Lock to protect the search tree. */ +extern int __sem_mappings_lock attribute_hidden; + + +/* Comparison function for search in tree with existing mappings. */ +extern int __sem_search (const void *a, const void *b) attribute_hidden; + +static inline void __new_sem_open_init (struct new_sem *sem, unsigned value) +{ + /* This always is a shared semaphore. */ + *sem = (struct new_sem) __SEMAPHORE_INITIALIZER (1, value); +} diff --git a/sysdeps/htl/sem-close.c b/sysdeps/htl/sem-close.c deleted file mode 100644 index e56875853..000000000 --- a/sysdeps/htl/sem-close.c +++ /dev/null @@ -1,31 +0,0 @@ -/* Close a named semaphore. Generic version. - Copyright (C) 2005-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 - . */ - -#include -#include - -#include - -int -__sem_close (sem_t *sem) -{ - errno = EOPNOTSUPP; - return -1; -} - -strong_alias (__sem_close, sem_close); diff --git a/sysdeps/htl/sem-open.c b/sysdeps/htl/sem-open.c deleted file mode 100644 index 28483ef6a..000000000 --- a/sysdeps/htl/sem-open.c +++ /dev/null @@ -1,31 +0,0 @@ -/* Open a named semaphore. Generic version. - Copyright (C) 2005-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 - . */ - -#include -#include - -#include - -sem_t * -__sem_open (const char *name, int open_flags, ...) -{ - errno = EOPNOTSUPP; - return SEM_FAILED; -} - -strong_alias (__sem_open, sem_open); diff --git a/sysdeps/htl/sem-unlink.c b/sysdeps/htl/sem-unlink.c deleted file mode 100644 index c92c8317b..000000000 --- a/sysdeps/htl/sem-unlink.c +++ /dev/null @@ -1,31 +0,0 @@ -/* Unlink a named semaphore. Generic version. - Copyright (C) 2005-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 - . */ - -#include -#include - -#include - -int -__sem_unlink (const char *name) -{ - errno = EOPNOTSUPP; - return -1; -} - -strong_alias (__sem_unlink, sem_unlink); diff --git a/nptl/sem_close.c b/sysdeps/pthread/sem_close.c similarity index 100% rename from nptl/sem_close.c rename to sysdeps/pthread/sem_close.c diff --git a/nptl/sem_open.c b/sysdeps/pthread/sem_open.c similarity index 100% rename from nptl/sem_open.c rename to sysdeps/pthread/sem_open.c diff --git a/nptl/sem_unlink.c b/sysdeps/pthread/sem_unlink.c similarity index 100% rename from nptl/sem_unlink.c rename to sysdeps/pthread/sem_unlink.c -- 2.30.2