diff options
author | Adam Hess <adamhess1991@gmail.com> | 2024-01-04 10:43:49 -0800 |
---|---|---|
committer | Yusuke Endoh <mame@ruby-lang.org> | 2024-01-05 08:56:44 +0900 |
commit | 6aacbd690ccde53f9b97c6673482cb11df3f2955 (patch) | |
tree | 1589d3aa3cb68f1cbf5f24ff68e8034b82e5fd62 /ext/socket | |
parent | dd8157f79fe9b620370e85f63da1828efb9aca1d (diff) |
Free pthread_attr after setting up the thread
[bug #20149]
Diffstat (limited to 'ext/socket')
-rw-r--r-- | ext/socket/raddrinfo.c | 12 |
1 files changed, 11 insertions, 1 deletions
diff --git a/ext/socket/raddrinfo.c b/ext/socket/raddrinfo.c index 9747f94036..ceaac031a2 100644 --- a/ext/socket/raddrinfo.c +++ b/ext/socket/raddrinfo.c @@ -511,6 +511,11 @@ start: } pthread_detach(th); + int r; + if ((r = pthread_attr_destroy(&attr)) != 0) { + rb_bug_errno("pthread_attr_destroy", r); + } + rb_thread_call_without_gvl2(wait_getaddrinfo, arg, cancel_getaddrinfo, arg); int need_free = 0; @@ -732,12 +737,17 @@ start: #endif pthread_t th; - if (do_pthread_create(&th, 0, do_getnameinfo, arg) != 0) { + if (do_pthread_create(&th, &attr, do_getnameinfo, arg) != 0) { free_getnameinfo_arg(arg); return EAI_AGAIN; } pthread_detach(th); + int r; + if ((r = pthread_attr_destroy(&attr)) != 0) { + rb_bug_errno("pthread_attr_destroy", r); + } + rb_thread_call_without_gvl2(wait_getnameinfo, arg, cancel_getnameinfo, arg); int need_free = 0; |