mirror of
https://sourceware.org/git/glibc.git
synced 2024-11-24 14:00:30 +00:00
* sysdeps/unix/sysv/linux/internaltypes.h: Introduce
COND_NWAITERS_SHIFT. * pthread_cond_destroy.c: Use COND_NWAITERS_SHIFT instead of COND_CLOCK_BITS. * pthread_cond_init.c: Likewise. * pthread_cond_timedwait.c: Likewise. * pthread_cond_wait.c: Likewise. * pthread_condattr_getclock.c: Likewise. * pthread_condattr_setclock.c: Likewise. * sysdeps/unix/sysv/linux/lowlevelcond.sym: Likewise. * sysdeps/unix/sysv/linux/i386/i486/pthread_cond_timedwait.S: Likewise. * sysdeps/unix/sysv/linux/i386/i486/pthread_cond_wait.S: Likewise. * sysdeps/unix/sysv/linux/x86_64/pthread_cond_timedwait.S: Likewise. * sysdeps/unix/sysv/linux/x86_64/pthread_cond_wait.S: Likewise.
This commit is contained in:
parent
5da4373cfd
commit
ee5d5755a8
@ -1,3 +1,20 @@
|
||||
2007-05-29 Ulrich Drepper <drepper@redhat.com>
|
||||
|
||||
* sysdeps/unix/sysv/linux/internaltypes.h: Introduce
|
||||
COND_NWAITERS_SHIFT.
|
||||
* pthread_cond_destroy.c: Use COND_NWAITERS_SHIFT instead of
|
||||
COND_CLOCK_BITS.
|
||||
* pthread_cond_init.c: Likewise.
|
||||
* pthread_cond_timedwait.c: Likewise.
|
||||
* pthread_cond_wait.c: Likewise.
|
||||
* pthread_condattr_getclock.c: Likewise.
|
||||
* pthread_condattr_setclock.c: Likewise.
|
||||
* sysdeps/unix/sysv/linux/lowlevelcond.sym: Likewise.
|
||||
* sysdeps/unix/sysv/linux/i386/i486/pthread_cond_timedwait.S: Likewise.
|
||||
* sysdeps/unix/sysv/linux/i386/i486/pthread_cond_wait.S: Likewise.
|
||||
* sysdeps/unix/sysv/linux/x86_64/pthread_cond_timedwait.S: Likewise.
|
||||
* sysdeps/unix/sysv/linux/x86_64/pthread_cond_wait.S: Likewise.
|
||||
|
||||
2007-05-28 Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
* sysdeps/unix/sysv/linux/powerpc/pthread_attr_setstacksize.c: Include
|
||||
|
@ -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.
|
||||
Contributed by Ulrich Drepper <drepper@redhat.com>, 2002.
|
||||
|
||||
@ -45,7 +45,7 @@ __pthread_cond_destroy (cond)
|
||||
pthread_cond_destroy needs to wait for them. */
|
||||
unsigned int nwaiters = cond->__data.__nwaiters;
|
||||
|
||||
if (nwaiters >= (1 << COND_CLOCK_BITS))
|
||||
if (nwaiters >= (1 << COND_NWAITERS_SHIFT))
|
||||
{
|
||||
/* Wake everybody on the associated mutex in case there are
|
||||
threads that have been requeued to it.
|
||||
@ -72,7 +72,7 @@ __pthread_cond_destroy (cond)
|
||||
|
||||
nwaiters = cond->__data.__nwaiters;
|
||||
}
|
||||
while (nwaiters >= (1 << COND_CLOCK_BITS));
|
||||
while (nwaiters >= (1 << COND_NWAITERS_SHIFT));
|
||||
}
|
||||
|
||||
return 0;
|
||||
|
@ -1,4 +1,4 @@
|
||||
/* Copyright (C) 2002, 2003, 2004, 2005 Free Software Foundation, Inc.
|
||||
/* Copyright (C) 2002, 2003, 2004, 2005, 2007 Free Software Foundation, Inc.
|
||||
This file is part of the GNU C Library.
|
||||
Contributed by Ulrich Drepper <drepper@redhat.com>, 2002.
|
||||
|
||||
@ -31,8 +31,8 @@ __pthread_cond_init (cond, cond_attr)
|
||||
cond->__data.__lock = LLL_MUTEX_LOCK_INITIALIZER;
|
||||
cond->__data.__futex = 0;
|
||||
cond->__data.__nwaiters = (icond_attr != NULL
|
||||
&& ((icond_attr->value & (COND_CLOCK_BITS << 1))
|
||||
>> 1));
|
||||
&& ((icond_attr->value
|
||||
& (COND_NWAITERS_SHIFT << 1)) >> 1));
|
||||
cond->__data.__total_seq = 0;
|
||||
cond->__data.__wakeup_seq = 0;
|
||||
cond->__data.__woken_seq = 0;
|
||||
|
@ -1,4 +1,4 @@
|
||||
/* Copyright (C) 2003, 2004 Free Software Foundation, Inc.
|
||||
/* Copyright (C) 2003, 2004, 2007 Free Software Foundation, Inc.
|
||||
This file is part of the GNU C Library.
|
||||
Contributed by Martin Schwidefsky <schwidefsky@de.ibm.com>, 2003.
|
||||
|
||||
@ -67,7 +67,7 @@ __pthread_cond_timedwait (cond, mutex, abstime)
|
||||
/* We have one new user of the condvar. */
|
||||
++cond->__data.__total_seq;
|
||||
++cond->__data.__futex;
|
||||
cond->__data.__nwaiters += 1 << COND_CLOCK_BITS;
|
||||
cond->__data.__nwaiters += 1 << COND_NWAITERS_SHIFT;
|
||||
|
||||
/* Remember the mutex we are using here. If there is already a
|
||||
different address store this is a bad user bug. Do not store
|
||||
@ -100,7 +100,7 @@ __pthread_cond_timedwait (cond, mutex, abstime)
|
||||
int ret;
|
||||
ret = INTERNAL_SYSCALL (clock_gettime, err, 2,
|
||||
(cond->__data.__nwaiters
|
||||
& ((1 << COND_CLOCK_BITS) - 1)),
|
||||
& ((1 << COND_NWAITERS_SHIFT) - 1)),
|
||||
&rt);
|
||||
# ifndef __ASSUME_POSIX_TIMERS
|
||||
if (__builtin_expect (INTERNAL_SYSCALL_ERROR_P (ret, err), 0))
|
||||
@ -189,13 +189,13 @@ __pthread_cond_timedwait (cond, mutex, abstime)
|
||||
|
||||
bc_out:
|
||||
|
||||
cond->__data.__nwaiters -= 1 << COND_CLOCK_BITS;
|
||||
cond->__data.__nwaiters -= 1 << COND_NWAITERS_SHIFT;
|
||||
|
||||
/* If pthread_cond_destroy was called on this variable already,
|
||||
notify the pthread_cond_destroy caller all waiters have left
|
||||
and it can be successfully destroyed. */
|
||||
if (cond->__data.__total_seq == -1ULL
|
||||
&& cond->__data.__nwaiters < (1 << COND_CLOCK_BITS))
|
||||
&& cond->__data.__nwaiters < (1 << COND_NWAITERS_SHIFT))
|
||||
lll_futex_wake (&cond->__data.__nwaiters, 1);
|
||||
|
||||
/* We are done with the condvar. */
|
||||
|
@ -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.
|
||||
Contributed by Martin Schwidefsky <schwidefsky@de.ibm.com>, 2003.
|
||||
|
||||
@ -62,14 +62,14 @@ __condvar_cleanup (void *arg)
|
||||
++cbuffer->cond->__data.__woken_seq;
|
||||
}
|
||||
|
||||
cbuffer->cond->__data.__nwaiters -= 1 << COND_CLOCK_BITS;
|
||||
cbuffer->cond->__data.__nwaiters -= 1 << COND_NWAITERS_SHIFT;
|
||||
|
||||
/* If pthread_cond_destroy was called on this variable already,
|
||||
notify the pthread_cond_destroy caller all waiters have left
|
||||
and it can be successfully destroyed. */
|
||||
destroying = 0;
|
||||
if (cbuffer->cond->__data.__total_seq == -1ULL
|
||||
&& cbuffer->cond->__data.__nwaiters < (1 << COND_CLOCK_BITS))
|
||||
&& cbuffer->cond->__data.__nwaiters < (1 << COND_NWAITERS_SHIFT))
|
||||
{
|
||||
lll_futex_wake (&cbuffer->cond->__data.__nwaiters, 1);
|
||||
destroying = 1;
|
||||
@ -111,7 +111,7 @@ __pthread_cond_wait (cond, mutex)
|
||||
/* We have one new user of the condvar. */
|
||||
++cond->__data.__total_seq;
|
||||
++cond->__data.__futex;
|
||||
cond->__data.__nwaiters += 1 << COND_CLOCK_BITS;
|
||||
cond->__data.__nwaiters += 1 << COND_NWAITERS_SHIFT;
|
||||
|
||||
/* Remember the mutex we are using here. If there is already a
|
||||
different address store this is a bad user bug. Do not store
|
||||
@ -168,13 +168,13 @@ __pthread_cond_wait (cond, mutex)
|
||||
|
||||
bc_out:
|
||||
|
||||
cond->__data.__nwaiters -= 1 << COND_CLOCK_BITS;
|
||||
cond->__data.__nwaiters -= 1 << COND_NWAITERS_SHIFT;
|
||||
|
||||
/* If pthread_cond_destroy was called on this varaible already,
|
||||
notify the pthread_cond_destroy caller all waiters have left
|
||||
and it can be successfully destroyed. */
|
||||
if (cond->__data.__total_seq == -1ULL
|
||||
&& cond->__data.__nwaiters < (1 << COND_CLOCK_BITS))
|
||||
&& cond->__data.__nwaiters < (1 << COND_NWAITERS_SHIFT))
|
||||
lll_futex_wake (&cond->__data.__nwaiters, 1);
|
||||
|
||||
/* We are done with the condvar. */
|
||||
|
@ -1,4 +1,4 @@
|
||||
/* Copyright (C) 2003, 2004 Free Software Foundation, Inc.
|
||||
/* Copyright (C) 2003, 2004, 2007 Free Software Foundation, Inc.
|
||||
This file is part of the GNU C Library.
|
||||
Contributed by Ulrich Drepper <drepper@redhat.com>, 2003.
|
||||
|
||||
@ -26,6 +26,6 @@ pthread_condattr_getclock (attr, clock_id)
|
||||
clockid_t *clock_id;
|
||||
{
|
||||
*clock_id = (((((const struct pthread_condattr *) attr)->value) >> 1)
|
||||
& ((1 << COND_CLOCK_BITS) - 1));
|
||||
& ((1 << COND_NWAITERS_SHIFT) - 1));
|
||||
return 0;
|
||||
}
|
||||
|
@ -1,4 +1,4 @@
|
||||
/* Copyright (C) 2003, 2004 Free Software Foundation, Inc.
|
||||
/* Copyright (C) 2003, 2004, 2007 Free Software Foundation, Inc.
|
||||
This file is part of the GNU C Library.
|
||||
Contributed by Ulrich Drepper <drepper@redhat.com>, 2003.
|
||||
|
||||
@ -62,11 +62,12 @@ pthread_condattr_setclock (attr, clock_id)
|
||||
return EINVAL;
|
||||
|
||||
/* Make sure the value fits in the bits we reserved. */
|
||||
assert (clock_id < (1 << COND_CLOCK_BITS));
|
||||
assert (clock_id < (1 << COND_NWAITERS_SHIFT));
|
||||
|
||||
int *valuep = &((struct pthread_condattr *) attr)->value;
|
||||
|
||||
*valuep = (*valuep & ~(1 << (COND_CLOCK_BITS + 1)) & ~1) | (clock_id << 1);
|
||||
*valuep = ((*valuep & ~(1 << (COND_NWAITERS_SHIFT + 1)) & ~1)
|
||||
| (clock_id << 1));
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
@ -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.
|
||||
Contributed by Ulrich Drepper <drepper@redhat.com>, 2002.
|
||||
|
||||
@ -87,7 +87,7 @@ __pthread_cond_timedwait:
|
||||
addl $1, total_seq(%ebx)
|
||||
adcl $0, total_seq+4(%ebx)
|
||||
addl $1, cond_futex(%ebx)
|
||||
addl $(1 << clock_bits), cond_nwaiters(%ebx)
|
||||
addl $(1 << nwaiters_shift), cond_nwaiters(%ebx)
|
||||
|
||||
#define FRAME_SIZE 24
|
||||
subl $FRAME_SIZE, %esp
|
||||
@ -106,7 +106,7 @@ __pthread_cond_timedwait:
|
||||
#ifdef __NR_clock_gettime
|
||||
/* Get the clock number. */
|
||||
movl cond_nwaiters(%ebx), %ebx
|
||||
andl $((1 << clock_bits) - 1), %ebx
|
||||
andl $((1 << nwaiters_shift) - 1), %ebx
|
||||
/* Only clocks 0 and 1 are allowed so far. Both are handled in the
|
||||
kernel. */
|
||||
leal 4(%esp), %ecx
|
||||
@ -228,7 +228,7 @@ __pthread_cond_timedwait:
|
||||
14: addl $1, woken_seq(%ebx)
|
||||
adcl $0, woken_seq+4(%ebx)
|
||||
|
||||
24: subl $(1 << clock_bits), cond_nwaiters(%ebx)
|
||||
24: subl $(1 << nwaiters_shift), cond_nwaiters(%ebx)
|
||||
|
||||
/* Wake up a thread which wants to destroy the condvar object. */
|
||||
movl total_seq(%ebx), %eax
|
||||
@ -236,7 +236,7 @@ __pthread_cond_timedwait:
|
||||
cmpl $0xffffffff, %eax
|
||||
jne 25f
|
||||
movl cond_nwaiters(%ebx), %eax
|
||||
andl $~((1 << clock_bits) - 1), %eax
|
||||
andl $~((1 << nwaiters_shift) - 1), %eax
|
||||
jne 25f
|
||||
|
||||
addl $cond_nwaiters, %ebx
|
||||
@ -424,7 +424,7 @@ __condvar_tw_cleanup:
|
||||
7: addl $1, woken_seq(%ebx)
|
||||
adcl $0, woken_seq+4(%ebx)
|
||||
|
||||
3: subl $(1 << clock_bits), cond_nwaiters(%ebx)
|
||||
3: subl $(1 << nwaiters_shift), cond_nwaiters(%ebx)
|
||||
|
||||
/* Wake up a thread which wants to destroy the condvar object. */
|
||||
xorl %edi, %edi
|
||||
@ -433,7 +433,7 @@ __condvar_tw_cleanup:
|
||||
cmpl $0xffffffff, %eax
|
||||
jne 4f
|
||||
movl cond_nwaiters(%ebx), %eax
|
||||
andl $~((1 << clock_bits) - 1), %eax
|
||||
andl $~((1 << nwaiters_shift) - 1), %eax
|
||||
jne 4f
|
||||
|
||||
addl $cond_nwaiters, %ebx
|
||||
|
@ -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.
|
||||
Contributed by Ulrich Drepper <drepper@redhat.com>, 2002.
|
||||
|
||||
@ -80,7 +80,7 @@ __pthread_cond_wait:
|
||||
addl $1, total_seq(%ebx)
|
||||
adcl $0, total_seq+4(%ebx)
|
||||
addl $1, cond_futex(%ebx)
|
||||
addl $(1 << clock_bits), cond_nwaiters(%ebx)
|
||||
addl $(1 << nwaiters_shift), cond_nwaiters(%ebx)
|
||||
|
||||
#define FRAME_SIZE 16
|
||||
subl $FRAME_SIZE, %esp
|
||||
@ -157,7 +157,7 @@ __pthread_cond_wait:
|
||||
adcl $0, woken_seq+4(%ebx)
|
||||
|
||||
/* Unlock */
|
||||
16: subl $(1 << clock_bits), cond_nwaiters(%ebx)
|
||||
16: subl $(1 << nwaiters_shift), cond_nwaiters(%ebx)
|
||||
|
||||
/* Wake up a thread which wants to destroy the condvar object. */
|
||||
movl total_seq(%ebx), %eax
|
||||
@ -165,7 +165,7 @@ __pthread_cond_wait:
|
||||
cmpl $0xffffffff, %eax
|
||||
jne 17f
|
||||
movl cond_nwaiters(%ebx), %eax
|
||||
andl $~((1 << clock_bits) - 1), %eax
|
||||
andl $~((1 << nwaiters_shift) - 1), %eax
|
||||
jne 17f
|
||||
|
||||
addl $cond_nwaiters, %ebx
|
||||
@ -315,7 +315,7 @@ __condvar_w_cleanup:
|
||||
7: addl $1, woken_seq(%ebx)
|
||||
adcl $0, woken_seq+4(%ebx)
|
||||
|
||||
3: subl $(1 << clock_bits), cond_nwaiters(%ebx)
|
||||
3: subl $(1 << nwaiters_shift), cond_nwaiters(%ebx)
|
||||
|
||||
/* Wake up a thread which wants to destroy the condvar object. */
|
||||
xorl %edi, %edi
|
||||
@ -324,7 +324,7 @@ __condvar_w_cleanup:
|
||||
cmpl $0xffffffff, %eax
|
||||
jne 4f
|
||||
movl cond_nwaiters(%ebx), %eax
|
||||
andl $~((1 << clock_bits) - 1), %eax
|
||||
andl $~((1 << nwaiters_shift) - 1), %eax
|
||||
jne 4f
|
||||
|
||||
addl $cond_nwaiters, %ebx
|
||||
|
@ -76,9 +76,11 @@ struct pthread_condattr
|
||||
|
||||
|
||||
/* The __NWAITERS field is used as a counter and to house the number
|
||||
of bits which represent the clock. COND_CLOCK_BITS is the number
|
||||
of bits reserved for the clock. */
|
||||
#define COND_CLOCK_BITS 1
|
||||
of bits for other purposes. COND_CLOCK_BITS is the number
|
||||
of bits needed to represent the ID of the clock. COND_NWAITERS_SHIFT
|
||||
is the number of bits reserved for other purposes like the clock. */
|
||||
#define COND_CLOCK_BITS 1
|
||||
#define COND_NWAITERS_SHIFT 8
|
||||
|
||||
|
||||
/* Read-write lock variable attribute data structure. */
|
||||
|
@ -13,4 +13,4 @@ wakeup_seq offsetof (pthread_cond_t, __data.__wakeup_seq)
|
||||
woken_seq offsetof (pthread_cond_t, __data.__woken_seq)
|
||||
dep_mutex offsetof (pthread_cond_t, __data.__mutex)
|
||||
broadcast_seq offsetof (pthread_cond_t, __data.__broadcast_seq)
|
||||
clock_bits COND_CLOCK_BITS
|
||||
nwaiters_shift COND_NWAITERS_SHIFT
|
||||
|
@ -1,4 +1,4 @@
|
||||
/* Copyright (C) 2002, 2003, 2004, 2005 Free Software Foundation, Inc.
|
||||
/* Copyright (C) 2002, 2003, 2004, 2005, 2007 Free Software Foundation, Inc.
|
||||
This file is part of the GNU C Library.
|
||||
Contributed by Ulrich Drepper <drepper@redhat.com>, 2002.
|
||||
|
||||
@ -111,7 +111,7 @@ __pthread_cond_timedwait:
|
||||
movq 8(%rsp), %rdi
|
||||
incq total_seq(%rdi)
|
||||
incl cond_futex(%rdi)
|
||||
addl $(1 << clock_bits), cond_nwaiters(%rdi)
|
||||
addl $(1 << nwaiters_shift), cond_nwaiters(%rdi)
|
||||
|
||||
/* Install cancellation handler. */
|
||||
#ifdef PIC
|
||||
@ -137,7 +137,7 @@ __pthread_cond_timedwait:
|
||||
structure stores the number minus 1. */
|
||||
movq 8(%rsp), %rdi
|
||||
movl cond_nwaiters(%rdi), %edi
|
||||
andl $((1 << clock_bits) - 1), %edi
|
||||
andl $((1 << nwaiters_shift) - 1), %edi
|
||||
/* Only clocks 0 and 1 are allowed so far. Both are handled in the
|
||||
kernel. */
|
||||
leaq 24(%rsp), %rsi
|
||||
@ -250,13 +250,13 @@ __pthread_cond_timedwait:
|
||||
9: xorq %r14, %r14
|
||||
14: incq woken_seq(%rdi)
|
||||
|
||||
24: subl $(1 << clock_bits), cond_nwaiters(%rdi)
|
||||
24: subl $(1 << nwaiters_shift), cond_nwaiters(%rdi)
|
||||
|
||||
/* Wake up a thread which wants to destroy the condvar object. */
|
||||
cmpq $0xffffffffffffffff, total_seq(%rdi)
|
||||
jne 25f
|
||||
movl cond_nwaiters(%rdi), %eax
|
||||
andl $~((1 << clock_bits) - 1), %eax
|
||||
andl $~((1 << nwaiters_shift) - 1), %eax
|
||||
jne 25f
|
||||
|
||||
addq $cond_nwaiters, %rdi
|
||||
|
@ -1,4 +1,4 @@
|
||||
/* Copyright (C) 2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc.
|
||||
/* Copyright (C) 2002,2003,2004,2005,2006,2007 Free Software Foundation, Inc.
|
||||
This file is part of the GNU C Library.
|
||||
Contributed by Ulrich Drepper <drepper@redhat.com>, 2002.
|
||||
|
||||
@ -77,14 +77,14 @@ __condvar_cleanup:
|
||||
incl cond_futex(%rdi)
|
||||
6: incq woken_seq(%rdi)
|
||||
|
||||
3: subl $(1 << clock_bits), cond_nwaiters(%rdi)
|
||||
3: subl $(1 << nwaiters_shift), cond_nwaiters(%rdi)
|
||||
|
||||
/* Wake up a thread which wants to destroy the condvar object. */
|
||||
xorq %r12, %r12
|
||||
cmpq $0xffffffffffffffff, total_seq(%rdi)
|
||||
jne 4f
|
||||
movl cond_nwaiters(%rdi), %eax
|
||||
andl $~((1 << clock_bits) - 1), %eax
|
||||
andl $~((1 << nwaiters_shift) - 1), %eax
|
||||
jne 4f
|
||||
|
||||
addq $cond_nwaiters, %rdi
|
||||
@ -185,7 +185,7 @@ __pthread_cond_wait:
|
||||
movq 8(%rsp), %rdi
|
||||
incq total_seq(%rdi)
|
||||
incl cond_futex(%rdi)
|
||||
addl $(1 << clock_bits), cond_nwaiters(%rdi)
|
||||
addl $(1 << nwaiters_shift), cond_nwaiters(%rdi)
|
||||
|
||||
/* Install cancellation handler. */
|
||||
#ifdef PIC
|
||||
@ -262,13 +262,13 @@ __pthread_cond_wait:
|
||||
incq woken_seq(%rdi)
|
||||
|
||||
/* Unlock */
|
||||
16: subl $(1 << clock_bits), cond_nwaiters(%rdi)
|
||||
16: subl $(1 << nwaiters_shift), cond_nwaiters(%rdi)
|
||||
|
||||
/* Wake up a thread which wants to destroy the condvar object. */
|
||||
cmpq $0xffffffffffffffff, total_seq(%rdi)
|
||||
jne 17f
|
||||
movl cond_nwaiters(%rdi), %eax
|
||||
andl $~((1 << clock_bits) - 1), %eax
|
||||
andl $~((1 << nwaiters_shift) - 1), %eax
|
||||
jne 17f
|
||||
|
||||
addq $cond_nwaiters, %rdi
|
||||
|
@ -269,13 +269,13 @@ get_mapping (request_type type, const char *key,
|
||||
!= keylen, 0))
|
||||
goto out_close2;
|
||||
|
||||
mapfd = *(int *) CMSG_DATA (cmsg);
|
||||
|
||||
if (__builtin_expect (CMSG_FIRSTHDR (&msg) == NULL
|
||||
|| (CMSG_FIRSTHDR (&msg)->cmsg_len
|
||||
!= CMSG_LEN (sizeof (int))), 0))
|
||||
goto out_close2;
|
||||
|
||||
mapfd = *(int *) CMSG_DATA (cmsg);
|
||||
|
||||
struct stat64 st;
|
||||
if (__builtin_expect (strcmp (resdata, key) != 0, 0)
|
||||
|| __builtin_expect (fstat64 (mapfd, &st) != 0, 0)
|
||||
|
Loading…
Reference in New Issue
Block a user