]> Cypherpunks repositories - gostls13.git/commitdiff
runtime/cgo: create C pthreads in detached state
authorIan Lance Taylor <iant@golang.org>
Tue, 13 Aug 2024 18:25:31 +0000 (11:25 -0700)
committerGopher Robot <gobot@golang.org>
Tue, 13 Aug 2024 22:54:53 +0000 (22:54 +0000)
Rather than explicitly calling pthread_detach.

Fixes #68850

Change-Id: I7b4042283f9feb5383bffd40fae6db6d23217f97
Reviewed-on: https://go-review.googlesource.com/c/go/+/605257
Commit-Queue: Ian Lance Taylor <iant@google.com>
Auto-Submit: Ian Lance Taylor <iant@google.com>
LUCI-TryBot-Result: Go LUCI <golang-scoped@luci-project-accounts.iam.gserviceaccount.com>
Reviewed-by: Ian Lance Taylor <iant@google.com>
Reviewed-by: Cherry Mui <cherryyz@google.com>
13 files changed:
src/runtime/cgo/gcc_darwin_amd64.c
src/runtime/cgo/gcc_darwin_arm64.c
src/runtime/cgo/gcc_dragonfly_amd64.c
src/runtime/cgo/gcc_freebsd.c
src/runtime/cgo/gcc_freebsd_amd64.c
src/runtime/cgo/gcc_libinit.c
src/runtime/cgo/gcc_linux.c
src/runtime/cgo/gcc_linux_amd64.c
src/runtime/cgo/gcc_linux_arm64.c
src/runtime/cgo/gcc_linux_s390x.c
src/runtime/cgo/gcc_netbsd.c
src/runtime/cgo/gcc_openbsd.c
src/runtime/cgo/gcc_ppc64x.c

index 5b5e369f26938baff84d7e0f622a55e3cc9399e9..1ffbbd75f2687779b3dd58229cebf4ef53012e2a 100644 (file)
@@ -34,6 +34,7 @@ _cgo_sys_thread_start(ThreadStart *ts)
        size = pthread_get_stacksize_np(pthread_self());
        pthread_attr_init(&attr);
        pthread_attr_setstacksize(&attr, size);
+       pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED);
        // Leave stacklo=0 and set stackhi=size; mstart will do the rest.
        ts->g->stackhi = size;
        err = _cgo_try_pthread_create(&p, &attr, threadentry, ts);
index f1344de8e19be3f7b85a38abcc2814f22781b317..4b34692957bac36ee4442dea0105fa4afaa406b5 100644 (file)
@@ -39,6 +39,7 @@ _cgo_sys_thread_start(ThreadStart *ts)
        size = pthread_get_stacksize_np(pthread_self());
        pthread_attr_init(&attr);
        pthread_attr_setstacksize(&attr, size);
+       pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED);
        // Leave stacklo=0 and set stackhi=size; mstart will do the rest.
        ts->g->stackhi = size;
        err = _cgo_try_pthread_create(&p, &attr, threadentry, ts);
index 009d4b4fb99e9c229ee9650ea14dbdc318f7899c..646e9e653a1bff582fa45704c47fb6f97db88504 100644 (file)
@@ -33,6 +33,7 @@ _cgo_sys_thread_start(ThreadStart *ts)
        pthread_sigmask(SIG_SETMASK, &ign, &oset);
 
        pthread_attr_init(&attr);
+       pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED);
        pthread_attr_getstacksize(&attr, &size);
 
        // Leave stacklo=0 and set stackhi=size; mstart will do the rest.
index a94121138d59020cab9c155b2aa2b53238b064f7..1cc582a3bbc37f8374278fc8f22a59162471d98b 100644 (file)
@@ -45,6 +45,7 @@ _cgo_sys_thread_start(ThreadStart *ts)
        pthread_sigmask(SIG_SETMASK, &ign, &oset);
 
        pthread_attr_init(&attr);
+       pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED);
        pthread_attr_getstacksize(&attr, &size);
        // Leave stacklo=0 and set stackhi=size; mstart will do the rest.
        ts->g->stackhi = size;
index 31905f2aa3c4ef7985010bc017cbf2115ddd4675..ec23a00fee38e818c72cd4cc0287afe31057a637 100644 (file)
@@ -43,6 +43,7 @@ _cgo_sys_thread_start(ThreadStart *ts)
        pthread_sigmask(SIG_SETMASK, &ign, &oset);
 
        pthread_attr_init(&attr);
+       pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED);
        pthread_attr_getstacksize(&attr, &size);
        // Leave stacklo=0 and set stackhi=size; mstart will do the rest.
        ts->g->stackhi = size;
index 33a9ff93cad52711313784832c5097a20073c4b7..2fe76e4360738b7154b21ce216f987a9f2711aa7 100644 (file)
@@ -37,8 +37,12 @@ static void (*cgo_context_function)(struct context_arg*);
 
 void
 x_cgo_sys_thread_create(void* (*func)(void*), void* arg) {
+       pthread_attr_t attr;
        pthread_t p;
-       int err = _cgo_try_pthread_create(&p, NULL, func, arg);
+
+       pthread_attr_init(&attr);
+       pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED);
+       int err = _cgo_try_pthread_create(&p, &attr, func, arg);
        if (err != 0) {
                fprintf(stderr, "pthread_create failed: %s", strerror(err));
                abort();
@@ -153,7 +157,6 @@ _cgo_try_pthread_create(pthread_t* thread, const pthread_attr_t* attr, void* (*p
        for (tries = 0; tries < 20; tries++) {
                err = pthread_create(thread, attr, pfn, arg);
                if (err == 0) {
-                       pthread_detach(*thread);
                        return 0;
                }
                if (err != EAGAIN) {
index 9624df596feffe56c269245acf6ce82bde7973fb..fbdb5e652a2142e39993f90d90551c2df6266e6f 100644 (file)
@@ -40,6 +40,7 @@ _cgo_sys_thread_start(ThreadStart *ts)
        pthread_sigmask(SIG_SETMASK, &ign, &oset);
 
        pthread_attr_init(&attr);
+       pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED);
        pthread_attr_getstacksize(&attr, &size);
        // Leave stacklo=0 and set stackhi=size; mstart will do the rest.
        ts->g->stackhi = size;
index dcb596e213750c8d2190c9e8f058231be5f46a27..c81fde2887d5186993b1b0ef14756867e68a81a1 100644 (file)
@@ -63,6 +63,7 @@ _cgo_sys_thread_start(ThreadStart *ts)
        pthread_sigmask(SIG_SETMASK, &ign, &oset);
 
        pthread_attr_init(&attr);
+       pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED);
        pthread_attr_getstacksize(&attr, &size);
        // Leave stacklo=0 and set stackhi=size; mstart will do the rest.
        ts->g->stackhi = size;
index 0dcff2c0901406d967fd92a6a947eddb44e40158..ce46804ba29738de00f4a6768cf8655091115a70 100644 (file)
@@ -28,6 +28,7 @@ _cgo_sys_thread_start(ThreadStart *ts)
        pthread_sigmask(SIG_SETMASK, &ign, &oset);
 
        pthread_attr_init(&attr);
+       pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED);
        pthread_attr_getstacksize(&attr, &size);
        // Leave stacklo=0 and set stackhi=size; mstart will do the rest.
        ts->g->stackhi = size;
index 4b9f76c39ef839098013fa4f3c4e661aaa6021d2..1fae4e7d44142a4e90ff1c0051dc9adff41500e4 100644 (file)
@@ -33,6 +33,7 @@ _cgo_sys_thread_start(ThreadStart *ts)
        pthread_sigmask(SIG_SETMASK, &ign, &oset);
 
        pthread_attr_init(&attr);
+       pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED);
        pthread_attr_getstacksize(&attr, &size);
        // Leave stacklo=0 and set stackhi=size; mstart will do the rest.
        ts->g->stackhi = size;
index 16819ce8b47077a8a870f7a35d36de7ba42c1367..98b629e805b3656c95686a75a0b5b6dd5eadb4f2 100644 (file)
@@ -35,6 +35,7 @@ _cgo_sys_thread_start(ThreadStart *ts)
        pthread_sigmask(SIG_SETMASK, &ign, &oset);
 
        pthread_attr_init(&attr);
+       pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED);
        pthread_attr_getstacksize(&attr, &size);
        // Leave stacklo=0 and set stackhi=size; mstart will do the rest.
        ts->g->stackhi = size;
index 3a4e545496603b1fe46928596a7ccd0acd8c6471..b31c312f590e9c3162b861373e009f4776ca883f 100644 (file)
@@ -34,6 +34,7 @@ _cgo_sys_thread_start(ThreadStart *ts)
        pthread_sigmask(SIG_SETMASK, &ign, &oset);
 
        pthread_attr_init(&attr);
+       pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED);
        pthread_attr_getstacksize(&attr, &size);
 
        // Leave stacklo=0 and set stackhi=size; mstart will do the rest.
index 98a654957b189a903d6940c3dba1dcec3a5d2cb1..e1a5c14ff94f0553dfc6a72deca2623a820f92de 100644 (file)
@@ -35,6 +35,7 @@ _cgo_sys_thread_start(ThreadStart *ts)
        pthread_sigmask(SIG_SETMASK, &ign, &oset);
 
        pthread_attr_init(&attr);
+       pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED);
        pthread_attr_getstacksize(&attr, &size);
        // Leave stacklo=0 and set stackhi=size; mstart will do the rest.
        ts->g->stackhi = size;