]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
gh-154283: Make threading.get_native_id() unique across processes on DragonFly (GH...
authorSerhiy Storchaka <storchaka@gmail.com>
Mon, 20 Jul 2026 19:13:21 +0000 (22:13 +0300)
committerGitHub <noreply@github.com>
Mon, 20 Jul 2026 19:13:21 +0000 (19:13 +0000)
On DragonFly BSD lwp_gettid() is only unique within a process (the main
thread is always LWP 1), so combine it with the process id, like Solaris.

Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Misc/NEWS.d/next/Library/2026-07-20-21-36-40.gh-issue-154283.Xip7xE.rst [new file with mode: 0644]
Python/thread_pthread.h

diff --git a/Misc/NEWS.d/next/Library/2026-07-20-21-36-40.gh-issue-154283.Xip7xE.rst b/Misc/NEWS.d/next/Library/2026-07-20-21-36-40.gh-issue-154283.Xip7xE.rst
new file mode 100644 (file)
index 0000000..a278d67
--- /dev/null
@@ -0,0 +1,2 @@
+On DragonFly BSD, :func:`threading.get_native_id` now returns a value that is
+unique across processes, matching the other platforms.
index 8496f91db2eec2be62216dd87e389642abc9078f..de93178576e6ec7547289bedd2c860f0fdfac827 100644 (file)
@@ -399,8 +399,8 @@ PyThread_get_thread_native_id(void)
     lwpid_t native_id;
     native_id = _lwp_self();
 #elif defined(__DragonFly__)
-    lwpid_t native_id;
-    native_id = lwp_gettid();
+    // lwp_gettid() is only unique within a process, so combine it with the pid.
+    unsigned long native_id = (unsigned long)getpid() << 32 | lwp_gettid();
 #elif defined(__sun__) && SIZEOF_LONG >= 8
     unsigned long native_id = (unsigned long)getpid() << 32 | thr_self();
 #endif