mirror of
https://sourceware.org/git/glibc.git
synced 2025-07-30 22:43:12 +03:00
* pthread_getattr_np.c: No need to install a cancellation handler,
this is no cancellation point. * pthread_getschedparam.c: Likewise. * pthread_setschedparam.c: Likewise. * pthread_setschedprio.c: Likewise. * sysdeps/unix/sysv/linux/lowlevellock.c: Remove all traces of lll_unlock_wake_cb. * sysdeps/unix/sysv/linux/alpha/lowlevellock.h: Likewise. * sysdeps/unix/sysv/linux/i386/lowlevellock.h: Likewise. * sysdeps/unix/sysv/linux/i386/i486/lowlevellock.S: Likewise. * sysdeps/unix/sysv/linux/ia64/lowlevellock.h: Likewise. * sysdeps/unix/sysv/linux/powerpc/lowlevellock.h: Likewise. * sysdeps/unix/sysv/linux/s390/lowlevellock.h: Likewise. * sysdeps/unix/sysv/linux/sh/lowlevellock.S: Likewise. * sysdeps/unix/sysv/linux/sh/lowlevellock.h: Likewise. * sysdeps/unix/sysv/linux/sparc/lowlevellock.h: Likewise. * sysdeps/unix/sysv/linux/sparc/sparc32/lowlevellock.c: Likewise. * sysdeps/unix/sysv/linux/x86_64/lowlevellock.S: Likewise. * sysdeps/unix/sysv/linux/x86_64/lowlevellock.h: Likewise.
This commit is contained in:
@ -1,8 +1,24 @@
|
|||||||
2007-05-29 Ulrich Drepper <drepper@redhat.com>
|
2007-05-29 Ulrich Drepper <drepper@redhat.com>
|
||||||
|
|
||||||
* sysdeps/unix/sysv/linux/x86_64/lowlevellock.S
|
* pthread_getattr_np.c: No need to install a cancellation handler,
|
||||||
(__lll_mutex_unlock_wake): Add back label '1' which went AWOL quite
|
this is no cancellation point.
|
||||||
some time ago.
|
* pthread_getschedparam.c: Likewise.
|
||||||
|
* pthread_setschedparam.c: Likewise.
|
||||||
|
* pthread_setschedprio.c: Likewise.
|
||||||
|
* sysdeps/unix/sysv/linux/lowlevellock.c: Remove all traces of
|
||||||
|
lll_unlock_wake_cb.
|
||||||
|
* sysdeps/unix/sysv/linux/alpha/lowlevellock.h: Likewise.
|
||||||
|
* sysdeps/unix/sysv/linux/i386/lowlevellock.h: Likewise.
|
||||||
|
* sysdeps/unix/sysv/linux/i386/i486/lowlevellock.S: Likewise.
|
||||||
|
* sysdeps/unix/sysv/linux/ia64/lowlevellock.h: Likewise.
|
||||||
|
* sysdeps/unix/sysv/linux/powerpc/lowlevellock.h: Likewise.
|
||||||
|
* sysdeps/unix/sysv/linux/s390/lowlevellock.h: Likewise.
|
||||||
|
* sysdeps/unix/sysv/linux/sh/lowlevellock.S: Likewise.
|
||||||
|
* sysdeps/unix/sysv/linux/sh/lowlevellock.h: Likewise.
|
||||||
|
* sysdeps/unix/sysv/linux/sparc/lowlevellock.h: Likewise.
|
||||||
|
* sysdeps/unix/sysv/linux/sparc/sparc32/lowlevellock.c: Likewise.
|
||||||
|
* sysdeps/unix/sysv/linux/x86_64/lowlevellock.S: Likewise.
|
||||||
|
* sysdeps/unix/sysv/linux/x86_64/lowlevellock.h: Likewise.
|
||||||
|
|
||||||
* sysdeps/unix/sysv/linux/i386/i486/libc-lowlevellock.S: Checking
|
* sysdeps/unix/sysv/linux/i386/i486/libc-lowlevellock.S: Checking
|
||||||
whether there are more than one thread makes no sense here since
|
whether there are more than one thread makes no sense here since
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
/* Copyright (C) 2002, 2003, 2004, 2006 Free Software Foundation, Inc.
|
/* Copyright (C) 2002, 2003, 2004, 2006, 2007 Free Software Foundation, Inc.
|
||||||
This file is part of the GNU C Library.
|
This file is part of the GNU C Library.
|
||||||
Contributed by Ulrich Drepper <drepper@redhat.com>, 2002.
|
Contributed by Ulrich Drepper <drepper@redhat.com>, 2002.
|
||||||
|
|
||||||
@ -39,10 +39,6 @@ pthread_getattr_np (thread_id, attr)
|
|||||||
struct pthread_attr *iattr = (struct pthread_attr *) attr;
|
struct pthread_attr *iattr = (struct pthread_attr *) attr;
|
||||||
int ret = 0;
|
int ret = 0;
|
||||||
|
|
||||||
/* We have to handle cancellation in the following code since we are
|
|
||||||
locking another threads desriptor. */
|
|
||||||
pthread_cleanup_push ((void (*) (void *)) lll_unlock_wake_cb, &thread->lock);
|
|
||||||
|
|
||||||
lll_lock (thread->lock);
|
lll_lock (thread->lock);
|
||||||
|
|
||||||
/* The thread library is responsible for keeping the values in the
|
/* The thread library is responsible for keeping the values in the
|
||||||
@ -175,7 +171,5 @@ pthread_getattr_np (thread_id, attr)
|
|||||||
|
|
||||||
lll_unlock (thread->lock);
|
lll_unlock (thread->lock);
|
||||||
|
|
||||||
pthread_cleanup_pop (0);
|
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
/* Copyright (C) 2002, 2003, 2004 Free Software Foundation, Inc.
|
/* Copyright (C) 2002, 2003, 2004, 2007 Free Software Foundation, Inc.
|
||||||
This file is part of the GNU C Library.
|
This file is part of the GNU C Library.
|
||||||
Contributed by Ulrich Drepper <drepper@redhat.com>, 2002.
|
Contributed by Ulrich Drepper <drepper@redhat.com>, 2002.
|
||||||
|
|
||||||
@ -38,10 +38,6 @@ __pthread_getschedparam (threadid, policy, param)
|
|||||||
|
|
||||||
int result = 0;
|
int result = 0;
|
||||||
|
|
||||||
/* We have to handle cancellation in the following code since we are
|
|
||||||
locking another threads descriptor. */
|
|
||||||
pthread_cleanup_push ((void (*) (void *)) lll_unlock_wake_cb, &pd->lock);
|
|
||||||
|
|
||||||
lll_lock (pd->lock);
|
lll_lock (pd->lock);
|
||||||
|
|
||||||
/* The library is responsible for maintaining the values at all
|
/* The library is responsible for maintaining the values at all
|
||||||
@ -74,8 +70,6 @@ __pthread_getschedparam (threadid, policy, param)
|
|||||||
|
|
||||||
lll_unlock (pd->lock);
|
lll_unlock (pd->lock);
|
||||||
|
|
||||||
pthread_cleanup_pop (0);
|
|
||||||
|
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
strong_alias (__pthread_getschedparam, pthread_getschedparam)
|
strong_alias (__pthread_getschedparam, pthread_getschedparam)
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
/* Copyright (C) 2002, 2003, 2004, 2006 Free Software Foundation, Inc.
|
/* Copyright (C) 2002, 2003, 2004, 2006, 2007 Free Software Foundation, Inc.
|
||||||
This file is part of the GNU C Library.
|
This file is part of the GNU C Library.
|
||||||
Contributed by Ulrich Drepper <drepper@redhat.com>, 2002.
|
Contributed by Ulrich Drepper <drepper@redhat.com>, 2002.
|
||||||
|
|
||||||
@ -39,10 +39,6 @@ __pthread_setschedparam (threadid, policy, param)
|
|||||||
|
|
||||||
int result = 0;
|
int result = 0;
|
||||||
|
|
||||||
/* We have to handle cancellation in the following code since we are
|
|
||||||
locking another threads desriptor. */
|
|
||||||
pthread_cleanup_push ((void (*) (void *)) lll_unlock_wake_cb, &pd->lock);
|
|
||||||
|
|
||||||
lll_lock (pd->lock);
|
lll_lock (pd->lock);
|
||||||
|
|
||||||
struct sched_param p;
|
struct sched_param p;
|
||||||
@ -73,8 +69,6 @@ __pthread_setschedparam (threadid, policy, param)
|
|||||||
|
|
||||||
lll_unlock (pd->lock);
|
lll_unlock (pd->lock);
|
||||||
|
|
||||||
pthread_cleanup_pop (0);
|
|
||||||
|
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
strong_alias (__pthread_setschedparam, pthread_setschedparam)
|
strong_alias (__pthread_setschedparam, pthread_setschedparam)
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
/* Copyright (C) 2002, 2003, 2004 Free Software Foundation, Inc.
|
/* Copyright (C) 2002, 2003, 2004, 2007 Free Software Foundation, Inc.
|
||||||
This file is part of the GNU C Library.
|
This file is part of the GNU C Library.
|
||||||
Contributed by Ulrich Drepper <drepper@redhat.com>, 2002.
|
Contributed by Ulrich Drepper <drepper@redhat.com>, 2002.
|
||||||
|
|
||||||
@ -41,10 +41,6 @@ pthread_setschedprio (threadid, prio)
|
|||||||
struct sched_param param;
|
struct sched_param param;
|
||||||
param.sched_priority = prio;
|
param.sched_priority = prio;
|
||||||
|
|
||||||
/* We have to handle cancellation in the following code since we are
|
|
||||||
locking another threads desriptor. */
|
|
||||||
pthread_cleanup_push ((void (*) (void *)) lll_unlock_wake_cb, &pd->lock);
|
|
||||||
|
|
||||||
lll_lock (pd->lock);
|
lll_lock (pd->lock);
|
||||||
|
|
||||||
/* If the thread should have higher priority because of some
|
/* If the thread should have higher priority because of some
|
||||||
@ -66,7 +62,5 @@ pthread_setschedprio (threadid, prio)
|
|||||||
|
|
||||||
lll_unlock (pd->lock);
|
lll_unlock (pd->lock);
|
||||||
|
|
||||||
pthread_cleanup_pop (0);
|
|
||||||
|
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
/* Copyright (C) 2003, 2004, 2006 Free Software Foundation, Inc.
|
/* Copyright (C) 2003, 2004, 2006, 2007 Free Software Foundation, Inc.
|
||||||
This file is part of the GNU C Library.
|
This file is part of the GNU C Library.
|
||||||
|
|
||||||
The GNU C Library is free software; you can redistribute it and/or
|
The GNU C Library is free software; you can redistribute it and/or
|
||||||
@ -237,8 +237,6 @@ typedef int lll_lock_t;
|
|||||||
#define LLL_LOCK_INITIALIZER (0)
|
#define LLL_LOCK_INITIALIZER (0)
|
||||||
#define LLL_LOCK_INITIALIZER_LOCKED (1)
|
#define LLL_LOCK_INITIALIZER_LOCKED (1)
|
||||||
|
|
||||||
extern int lll_unlock_wake_cb (int *__futex) attribute_hidden;
|
|
||||||
|
|
||||||
/* The states of a lock are:
|
/* The states of a lock are:
|
||||||
0 - untaken
|
0 - untaken
|
||||||
1 - taken by one user
|
1 - taken by one user
|
||||||
|
@ -219,35 +219,6 @@ __lll_mutex_timedlock_wait:
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
#ifdef NOT_IN_libc
|
|
||||||
.globl lll_unlock_wake_cb
|
|
||||||
.type lll_unlock_wake_cb,@function
|
|
||||||
.hidden lll_unlock_wake_cb
|
|
||||||
.align 16
|
|
||||||
lll_unlock_wake_cb:
|
|
||||||
pushl %ebx
|
|
||||||
pushl %ecx
|
|
||||||
pushl %edx
|
|
||||||
|
|
||||||
movl 20(%esp), %ebx
|
|
||||||
LOCK
|
|
||||||
subl $1, (%ebx)
|
|
||||||
je 1f
|
|
||||||
|
|
||||||
movl $FUTEX_WAKE, %ecx
|
|
||||||
movl $1, %edx /* Wake one thread. */
|
|
||||||
movl $SYS_futex, %eax
|
|
||||||
movl $0, (%ebx)
|
|
||||||
ENTER_KERNEL
|
|
||||||
|
|
||||||
1: popl %edx
|
|
||||||
popl %ecx
|
|
||||||
popl %ebx
|
|
||||||
ret
|
|
||||||
.size lll_unlock_wake_cb,.-lll_unlock_wake_cb
|
|
||||||
#endif
|
|
||||||
|
|
||||||
|
|
||||||
.globl __lll_mutex_unlock_wake
|
.globl __lll_mutex_unlock_wake
|
||||||
.type __lll_mutex_unlock_wake,@function
|
.type __lll_mutex_unlock_wake,@function
|
||||||
.hidden __lll_mutex_unlock_wake
|
.hidden __lll_mutex_unlock_wake
|
||||||
|
@ -449,7 +449,6 @@ extern int __lll_lock_wait (int val, int *__futex)
|
|||||||
__attribute ((regparm (2))) attribute_hidden;
|
__attribute ((regparm (2))) attribute_hidden;
|
||||||
extern int __lll_unlock_wake (int *__futex)
|
extern int __lll_unlock_wake (int *__futex)
|
||||||
__attribute ((regparm (1))) attribute_hidden;
|
__attribute ((regparm (1))) attribute_hidden;
|
||||||
extern int lll_unlock_wake_cb (int *__futex) attribute_hidden;
|
|
||||||
|
|
||||||
|
|
||||||
/* The states of a lock are:
|
/* The states of a lock are:
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
/* Copyright (C) 2003, 2004, 2006 Free Software Foundation, Inc.
|
/* Copyright (C) 2003, 2004, 2006, 2007 Free Software Foundation, Inc.
|
||||||
This file is part of the GNU C Library.
|
This file is part of the GNU C Library.
|
||||||
Contributed by Jakub Jelinek <jakub@redhat.com>, 2003.
|
Contributed by Jakub Jelinek <jakub@redhat.com>, 2003.
|
||||||
|
|
||||||
@ -226,8 +226,6 @@ extern int __lll_robust_timedlock_wait (int *futex, const struct timespec *)
|
|||||||
/* Type for lock object. */
|
/* Type for lock object. */
|
||||||
typedef int lll_lock_t;
|
typedef int lll_lock_t;
|
||||||
|
|
||||||
extern int lll_unlock_wake_cb (int *__futex) attribute_hidden;
|
|
||||||
|
|
||||||
/* Initializers for lock. */
|
/* Initializers for lock. */
|
||||||
#define LLL_LOCK_INITIALIZER (0)
|
#define LLL_LOCK_INITIALIZER (0)
|
||||||
#define LLL_LOCK_INITIALIZER_LOCKED (1)
|
#define LLL_LOCK_INITIALIZER_LOCKED (1)
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/* low level locking for pthread library. Generic futex-using version.
|
/* low level locking for pthread library. Generic futex-using version.
|
||||||
Copyright (C) 2003 Free Software Foundation, Inc.
|
Copyright (C) 2003, 2007 Free Software Foundation, Inc.
|
||||||
This file is part of the GNU C Library.
|
This file is part of the GNU C Library.
|
||||||
Contributed by Paul Mackerras <paulus@au.ibm.com>, 2003.
|
Contributed by Paul Mackerras <paulus@au.ibm.com>, 2003.
|
||||||
|
|
||||||
@ -76,20 +76,8 @@ __lll_timedlock_wait (int *futex, const struct timespec *abstime)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/* These don't get included in libc.so */
|
/* This function doesn't get included in libc.so */
|
||||||
#ifdef IS_IN_libpthread
|
#ifdef IS_IN_libpthread
|
||||||
int
|
|
||||||
lll_unlock_wake_cb (int *futex)
|
|
||||||
{
|
|
||||||
int val = atomic_exchange_rel (futex, 0);
|
|
||||||
|
|
||||||
if (__builtin_expect (val > 1, 0))
|
|
||||||
lll_futex_wake (futex, 1);
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
int
|
int
|
||||||
__lll_timedwait_tid (int *tidp, const struct timespec *abstime)
|
__lll_timedwait_tid (int *tidp, const struct timespec *abstime)
|
||||||
{
|
{
|
||||||
@ -127,5 +115,4 @@ __lll_timedwait_tid (int *tidp, const struct timespec *abstime)
|
|||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
@ -263,8 +263,6 @@ typedef int lll_lock_t;
|
|||||||
#define LLL_LOCK_INITIALIZER (0)
|
#define LLL_LOCK_INITIALIZER (0)
|
||||||
#define LLL_LOCK_INITIALIZER_LOCKED (1)
|
#define LLL_LOCK_INITIALIZER_LOCKED (1)
|
||||||
|
|
||||||
extern int lll_unlock_wake_cb (int *__futex) attribute_hidden;
|
|
||||||
|
|
||||||
/* The states of a lock are:
|
/* The states of a lock are:
|
||||||
0 - untaken
|
0 - untaken
|
||||||
1 - taken by one user
|
1 - taken by one user
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
/* Copyright (C) 2003, 2004, 2006 Free Software Foundation, Inc.
|
/* Copyright (C) 2003, 2004, 2006, 2007 Free Software Foundation, Inc.
|
||||||
This file is part of the GNU C Library.
|
This file is part of the GNU C Library.
|
||||||
Contributed by Martin Schwidefsky <schwidefsky@de.ibm.com>, 2003.
|
Contributed by Martin Schwidefsky <schwidefsky@de.ibm.com>, 2003.
|
||||||
|
|
||||||
@ -321,8 +321,6 @@ typedef int lll_lock_t;
|
|||||||
#define lll_unlock(futex) lll_mutex_unlock (futex)
|
#define lll_unlock(futex) lll_mutex_unlock (futex)
|
||||||
#define lll_islocked(futex) lll_mutex_islocked (futex)
|
#define lll_islocked(futex) lll_mutex_islocked (futex)
|
||||||
|
|
||||||
extern int lll_unlock_wake_cb (int *__futex) attribute_hidden;
|
|
||||||
|
|
||||||
/* The states of a lock are:
|
/* The states of a lock are:
|
||||||
1 - untaken
|
1 - untaken
|
||||||
0 - taken by one user
|
0 - taken by one user
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
/* Copyright (C) 2003, 2004, 2005 Free Software Foundation, Inc.
|
/* Copyright (C) 2003, 2004, 2005, 2007 Free Software Foundation, Inc.
|
||||||
This file is part of the GNU C Library.
|
This file is part of the GNU C Library.
|
||||||
|
|
||||||
The GNU C Library is free software; you can redistribute it and/or
|
The GNU C Library is free software; you can redistribute it and/or
|
||||||
@ -186,34 +186,6 @@ __lll_mutex_timedlock_wait:
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
#ifdef NOT_IN_libc
|
|
||||||
.globl lll_unlock_wake_cb
|
|
||||||
.type lll_unlock_wake_cb,@function
|
|
||||||
.hidden lll_unlock_wake_cb
|
|
||||||
.align 5
|
|
||||||
cfi_startproc
|
|
||||||
lll_unlock_wake_cb:
|
|
||||||
DEC (@r4, r2)
|
|
||||||
tst r2, r2
|
|
||||||
bt 1f
|
|
||||||
|
|
||||||
mov #FUTEX_WAKE, r5
|
|
||||||
mov #1, r6 /* Wake one thread. */
|
|
||||||
mov #0, r7
|
|
||||||
mov.l r7, @r4 /* Stores 0. */
|
|
||||||
mov #SYS_futex, r3
|
|
||||||
extu.b r3, r3
|
|
||||||
trapa #0x14
|
|
||||||
SYSCALL_INST_PAD
|
|
||||||
|
|
||||||
1:
|
|
||||||
rts
|
|
||||||
nop
|
|
||||||
cfi_endproc
|
|
||||||
.size lll_unlock_wake_cb,.-lll_unlock_wake_cb
|
|
||||||
#endif
|
|
||||||
|
|
||||||
|
|
||||||
.globl __lll_mutex_unlock_wake
|
.globl __lll_mutex_unlock_wake
|
||||||
.type __lll_mutex_unlock_wake,@function
|
.type __lll_mutex_unlock_wake,@function
|
||||||
.hidden __lll_mutex_unlock_wake
|
.hidden __lll_mutex_unlock_wake
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
/* Copyright (C) 2003, 2004, 2006 Free Software Foundation, Inc.
|
/* Copyright (C) 2003, 2004, 2006, 2007 Free Software Foundation, Inc.
|
||||||
This file is part of the GNU C Library.
|
This file is part of the GNU C Library.
|
||||||
|
|
||||||
The GNU C Library is free software; you can redistribute it and/or
|
The GNU C Library is free software; you can redistribute it and/or
|
||||||
@ -344,9 +344,6 @@ typedef int lll_lock_t;
|
|||||||
} while (0)
|
} while (0)
|
||||||
|
|
||||||
|
|
||||||
extern int lll_unlock_wake_cb (int *__futex) attribute_hidden;
|
|
||||||
|
|
||||||
|
|
||||||
/* The states of a lock are:
|
/* The states of a lock are:
|
||||||
0 - untaken
|
0 - untaken
|
||||||
1 - taken by one user
|
1 - taken by one user
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
/* Copyright (C) 2003, 2004, 2006 Free Software Foundation, Inc.
|
/* Copyright (C) 2003, 2004, 2006, 2007 Free Software Foundation, Inc.
|
||||||
This file is part of the GNU C Library.
|
This file is part of the GNU C Library.
|
||||||
Contributed by Jakub Jelinek <jakub@redhat.com>, 2003.
|
Contributed by Jakub Jelinek <jakub@redhat.com>, 2003.
|
||||||
|
|
||||||
@ -240,8 +240,6 @@ __lll_robust_mutex_timedlock (int *futex, const struct timespec *abstime,
|
|||||||
/* Type for lock object. */
|
/* Type for lock object. */
|
||||||
typedef int lll_lock_t;
|
typedef int lll_lock_t;
|
||||||
|
|
||||||
extern int lll_unlock_wake_cb (int *__futex) attribute_hidden;
|
|
||||||
|
|
||||||
/* Initializers for lock. */
|
/* Initializers for lock. */
|
||||||
#define LLL_LOCK_INITIALIZER (0)
|
#define LLL_LOCK_INITIALIZER (0)
|
||||||
#define LLL_LOCK_INITIALIZER_LOCKED (1)
|
#define LLL_LOCK_INITIALIZER_LOCKED (1)
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/* low level locking for pthread library. SPARC version.
|
/* low level locking for pthread library. SPARC version.
|
||||||
Copyright (C) 2003, 2006 Free Software Foundation, Inc.
|
Copyright (C) 2003, 2006, 2007 Free Software Foundation, Inc.
|
||||||
This file is part of the GNU C Library.
|
This file is part of the GNU C Library.
|
||||||
Contributed by Paul Mackerras <paulus@au.ibm.com>, 2003.
|
Contributed by Paul Mackerras <paulus@au.ibm.com>, 2003.
|
||||||
|
|
||||||
@ -76,20 +76,8 @@ __lll_timedlock_wait (int *futex, const struct timespec *abstime)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/* These don't get included in libc.so */
|
/* This function doesn't get included in libc.so */
|
||||||
#ifdef IS_IN_libpthread
|
#ifdef IS_IN_libpthread
|
||||||
int
|
|
||||||
lll_unlock_wake_cb (int *futex)
|
|
||||||
{
|
|
||||||
int val = atomic_exchange_24_rel (futex, 0);
|
|
||||||
|
|
||||||
if (__builtin_expect (val > 1, 0))
|
|
||||||
lll_futex_wake (futex, 1);
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
int
|
int
|
||||||
__lll_timedwait_tid (int *tidp, const struct timespec *abstime)
|
__lll_timedwait_tid (int *tidp, const struct timespec *abstime)
|
||||||
{
|
{
|
||||||
@ -127,5 +115,4 @@ __lll_timedwait_tid (int *tidp, const struct timespec *abstime)
|
|||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
@ -220,26 +220,6 @@ __lll_mutex_timedlock_wait:
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
#ifdef NOT_IN_libc
|
|
||||||
.globl lll_unlock_wake_cb
|
|
||||||
.type lll_unlock_wake_cb,@function
|
|
||||||
.hidden lll_unlock_wake_cb
|
|
||||||
.align 16
|
|
||||||
lll_unlock_wake_cb:
|
|
||||||
pushq %rsi
|
|
||||||
pushq %rdx
|
|
||||||
|
|
||||||
LOCK
|
|
||||||
addl $1, (%rdi)
|
|
||||||
jng 1f
|
|
||||||
|
|
||||||
popq %rdx
|
|
||||||
popq %rsi
|
|
||||||
retq
|
|
||||||
.size lll_unlock_wake_cb,.-lll_unlock_wake_cb
|
|
||||||
#endif
|
|
||||||
|
|
||||||
|
|
||||||
.globl __lll_mutex_unlock_wake
|
.globl __lll_mutex_unlock_wake
|
||||||
.type __lll_mutex_unlock_wake,@function
|
.type __lll_mutex_unlock_wake,@function
|
||||||
.hidden __lll_mutex_unlock_wake
|
.hidden __lll_mutex_unlock_wake
|
||||||
@ -253,8 +233,7 @@ __lll_mutex_unlock_wake:
|
|||||||
cfi_offset(%rsi, -16)
|
cfi_offset(%rsi, -16)
|
||||||
cfi_offset(%rdx, -24)
|
cfi_offset(%rdx, -24)
|
||||||
|
|
||||||
/* NB: the label '1' is needed by lll_unlock_wake_cb. */
|
movl $0, (%rdi)
|
||||||
1: movl $0, (%rdi)
|
|
||||||
LOAD_FUTEX_WAKE (%esi)
|
LOAD_FUTEX_WAKE (%esi)
|
||||||
movl $1, %edx /* Wake one thread. */
|
movl $1, %edx /* Wake one thread. */
|
||||||
movl $SYS_futex, %eax
|
movl $SYS_futex, %eax
|
||||||
|
@ -455,9 +455,6 @@ typedef int lll_lock_t;
|
|||||||
#define LLL_LOCK_INITIALIZER_LOCKED (1)
|
#define LLL_LOCK_INITIALIZER_LOCKED (1)
|
||||||
|
|
||||||
|
|
||||||
extern int lll_unlock_wake_cb (int *__futex) attribute_hidden;
|
|
||||||
|
|
||||||
|
|
||||||
/* The states of a lock are:
|
/* The states of a lock are:
|
||||||
0 - untaken
|
0 - untaken
|
||||||
1 - taken by one user
|
1 - taken by one user
|
||||||
|
Reference in New Issue
Block a user