mirror of
git://sourceware.org/git/glibc.git
synced 2024-11-21 01:12:26 +08:00
pthread: Move semaphore initialization for open to semaphoreP.h
This allows to easily reuse all of the sem_open/sem_close/sem_unlink implementations in the various ports.
This commit is contained in:
parent
3c1fe20a9f
commit
a28296e778
@ -211,17 +211,7 @@ sem_open (const char *name, int oflag, ...)
|
||||
struct new_sem newsem;
|
||||
} sem;
|
||||
|
||||
#if __HAVE_64B_ATOMICS
|
||||
sem.newsem.data = value;
|
||||
#else
|
||||
sem.newsem.value = value << SEM_VALUE_SHIFT;
|
||||
sem.newsem.nwaiters = 0;
|
||||
#endif
|
||||
/* pad is used as a mutex on pre-v9 sparc and ignored otherwise. */
|
||||
sem.newsem.pad = 0;
|
||||
|
||||
/* This always is a shared semaphore. */
|
||||
sem.newsem.private = FUTEX_SHARED;
|
||||
__new_sem_open_init (&sem.newsem, value);
|
||||
|
||||
/* Initialize the remaining bytes as well. */
|
||||
memset ((char *) &sem.initsem + sizeof (struct new_sem), '\0',
|
||||
|
@ -17,6 +17,7 @@
|
||||
<https://www.gnu.org/licenses/>. */
|
||||
|
||||
#include <semaphore.h>
|
||||
#include <futex-internal.h>
|
||||
#include "pthreadP.h"
|
||||
|
||||
#define SEM_SHM_PREFIX "sem."
|
||||
@ -42,6 +43,20 @@ 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)
|
||||
{
|
||||
#if __HAVE_64B_ATOMICS
|
||||
sem->data = value;
|
||||
#else
|
||||
sem->value = value << SEM_VALUE_SHIFT;
|
||||
sem->nwaiters = 0;
|
||||
#endif
|
||||
/* pad is used as a mutex on pre-v9 sparc and ignored otherwise. */
|
||||
sem->pad = 0;
|
||||
|
||||
/* This always is a shared semaphore. */
|
||||
sem->private = FUTEX_SHARED;
|
||||
}
|
||||
|
||||
/* Prototypes of functions with multiple interfaces. */
|
||||
extern int __new_sem_init (sem_t *sem, int pshared, unsigned int value);
|
||||
|
Loading…
Reference in New Issue
Block a user