]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
missing_syscall: drop raw_getpid() 36609/head
authorMike Yuan <me@yhndnzj.com>
Tue, 4 Mar 2025 17:49:04 +0000 (18:49 +0100)
committerMike Yuan <me@yhndnzj.com>
Tue, 4 Mar 2025 22:03:24 +0000 (23:03 +0100)
This used to be relevant since in old versions of glibc an internal
cache is maintained, while we might sidestep their invalidation
with raw_clone(). After glibc 2.25 getpid() is a trivial wrapper
for the syscall, and hence there's no need to have a separate
raw_getpid().

src/basic/missing_syscall.h
src/basic/process-util.c
src/basic/signal-util.c
src/test/test-process-util.c
src/test/test-raw-clone.c

index aae07a3f37d470b8c71c71860c24f6b02c9d94a9..296e39b919d18fab64868ef698b1c52538d4a8cd 100644 (file)
@@ -63,16 +63,6 @@ static inline int missing_ioprio_set(int which, int who, int ioprio) {
 
 /* ======================================================================= */
 
-static inline pid_t raw_getpid(void) {
-#if defined(__alpha__)
-        return (pid_t) syscall(__NR_getxpid);
-#else
-        return (pid_t) syscall(__NR_getpid);
-#endif
-}
-
-/* ======================================================================= */
-
 #if !HAVE_KCMP
 static inline int missing_kcmp(pid_t pid1, pid_t pid2, int type, unsigned long idx1, unsigned long idx2) {
         return syscall(__NR_kcmp, pid1, pid2, type, idx1, idx2);
index 80eeca6c0a8343711899cfb16dff1ffbbbf87a69..c19890b7c3652e117b6a55a7356a68b05fcc9eed 100644 (file)
@@ -1441,7 +1441,7 @@ pid_t getpid_cached(void) {
         case CACHED_PID_UNSET: { /* Not initialized yet, then do so now */
                 pid_t new_pid;
 
-                new_pid = raw_getpid();
+                new_pid = getpid();
 
                 if (!installed) {
                         /* __register_atfork() either returns 0 or -ENOMEM, in its glibc implementation. Since it's
@@ -1462,7 +1462,7 @@ pid_t getpid_cached(void) {
         }
 
         case CACHED_PID_BUSY: /* Somebody else is currently initializing */
-                return raw_getpid();
+                return getpid();
 
         default: /* Properly initialized */
                 return current_value;
index 7abee0d29f55609526cc7a9240667533127e5595..f5afe34307605c9066553ebba88a1f6d46d41542 100644 (file)
@@ -280,13 +280,13 @@ void propagate_signal(int sig, siginfo_t *siginfo) {
 
         /* To be called from a signal handler. Will raise the same signal again, in our process + in our threads.
          *
-         * Note that we use raw_getpid() instead of getpid_cached(). We might have forked with raw_clone()
+         * Note that we use getpid() instead of getpid_cached(). We might have forked with raw_clone()
          * earlier (see PID 1), and hence let's go to the raw syscall here. In particular as this is not
          * performance sensitive code.
          *
          * Note that we use kill() rather than raise() as fallback, for similar reasons. */
 
-        p = raw_getpid();
+        p = getpid();
 
         if (rt_tgsigqueueinfo(p, gettid(), sig, siginfo) < 0)
                 assert_se(kill(p, sig) >= 0);
index 0f00089eeceeda20601be6d0dea249666a965111..e9a461b141b473cdbdbb4293f3f36551d1cd9e81 100644 (file)
@@ -581,7 +581,7 @@ TEST(getpid_cached) {
         siginfo_t si;
         pid_t a, b, c, d, e, f, child;
 
-        a = raw_getpid();
+        a = getpid();
         b = getpid_cached();
         c = getpid();
 
@@ -593,7 +593,7 @@ TEST(getpid_cached) {
 
         if (child == 0) {
                 /* In child */
-                a = raw_getpid();
+                a = getpid();
                 b = getpid_cached();
                 c = getpid();
 
@@ -602,7 +602,7 @@ TEST(getpid_cached) {
                 _exit(EXIT_SUCCESS);
         }
 
-        d = raw_getpid();
+        d = getpid();
         e = getpid_cached();
         f = getpid();
 
index 23ec7d1aa08205c8fab04135e4bb63af25e5860f..a43e2c2c29a933f9f87db52ee1cd6644ce5f462e 100644 (file)
@@ -14,13 +14,13 @@ TEST(raw_clone) {
 
         parent = getpid();
         log_info("before clone: getpid()→"PID_FMT, parent);
-        assert_se(raw_getpid() == parent);
+        assert_se(getpid() == parent);
 
         pid = raw_clone(0);
         assert_se(pid >= 0);
 
-        pid2 = raw_getpid();
-        log_info("raw_clone: "PID_FMT" getpid()→"PID_FMT" raw_getpid()→"PID_FMT,
+        pid2 = getpid();
+        log_info("raw_clone: "PID_FMT" getpid()→"PID_FMT" getpid()→"PID_FMT,
                  pid, getpid(), pid2);
         if (pid == 0) {
                 assert_se(pid2 != parent);