This is the mail archive of the
glibc-cvs@sourceware.org
mailing list for the glibc project.
GNU C Library master sources branch roland/getpid created. glibc-2.19-381-g6814679
- From: roland at sourceware dot org
- To: glibc-cvs at sourceware dot org
- Date: 9 May 2014 21:24:11 -0000
- Subject: GNU C Library master sources branch roland/getpid created. glibc-2.19-381-g6814679
This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "GNU C Library master sources".
The branch, roland/getpid has been created
at 681467942d000f8f932ea1cc851b698dab5da85f (commit)
- Log -----------------------------------------------------------------
http://sourceware.org/git/gitweb.cgi?p=glibc.git;a=commitdiff;h=681467942d000f8f932ea1cc851b698dab5da85f
commit 681467942d000f8f932ea1cc851b698dab5da85f
Author: Roland McGrath <roland@hack.frob.com>
Date: Fri May 9 14:18:59 2014 -0700
Simplify getpid handling of the race case.
diff --git a/ChangeLog b/ChangeLog
index 2c08c50..0f0238d 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,12 @@
2014-05-09 Roland McGrath <roland@hack.frob.com>
+ * nptl/sysdeps/unix/sysv/linux/getpid.c
+ (really_getpid): Function removed.
+ (__getpid): Rewritten. Under [!NOT_IN_libc], use THREAD_SELF->pid if
+ it's > 0. Otherwise always just make the system call.
+
+2014-05-09 Roland McGrath <roland@hack.frob.com>
+
* sysdeps/arm/armv7/strcmp.S: Use sfi_breg prefix on loads not from sp.
[NO_THUMB]: Cope without cbz, cnbz, and orn instructions.
diff --git a/nptl/sysdeps/unix/sysv/linux/getpid.c b/nptl/sysdeps/unix/sysv/linux/getpid.c
index 937b1d4..9dcf38c 100644
--- a/nptl/sysdeps/unix/sysv/linux/getpid.c
+++ b/nptl/sysdeps/unix/sysv/linux/getpid.c
@@ -21,42 +21,17 @@
#include <sysdep.h>
-#ifndef NOT_IN_libc
-static inline __attribute__((always_inline)) pid_t really_getpid (pid_t oldval);
-
-static inline __attribute__((always_inline)) pid_t
-really_getpid (pid_t oldval)
-{
- if (__glibc_likely (oldval == 0))
- {
- pid_t selftid = THREAD_GETMEM (THREAD_SELF, tid);
- if (__glibc_likely (selftid != 0))
- return selftid;
- }
-
- INTERNAL_SYSCALL_DECL (err);
- pid_t result = INTERNAL_SYSCALL (getpid, err, 0);
-
- /* We do not set the PID field in the TID here since we might be
- called from a signal handler while the thread executes fork. */
- if (oldval == 0)
- THREAD_SETMEM (THREAD_SELF, tid, result);
- return result;
-}
-#endif
-
pid_t
__getpid (void)
{
-#ifdef NOT_IN_libc
- INTERNAL_SYSCALL_DECL (err);
- pid_t result = INTERNAL_SYSCALL (getpid, err, 0);
-#else
+#ifndef NOT_IN_libc
pid_t result = THREAD_GETMEM (THREAD_SELF, pid);
- if (__glibc_unlikely (result <= 0))
- result = really_getpid (result);
+ if (__glibc_likely (result > 0))
+ return result;
#endif
- return result;
+
+ INTERNAL_SYSCALL_DECL (err);
+ return INTERNAL_SYSCALL (getpid, err, 0);
}
libc_hidden_def (__getpid)
-----------------------------------------------------------------------
hooks/post-receive
--
GNU C Library master sources