summaryrefslogtreecommitdiff
path: root/ext/socket
diff options
context:
space:
mode:
authorAdam Hess <adamhess1991@gmail.com>2024-01-04 10:43:49 -0800
committerYusuke Endoh <mame@ruby-lang.org>2024-01-05 08:56:44 +0900
commit6aacbd690ccde53f9b97c6673482cb11df3f2955 (patch)
tree1589d3aa3cb68f1cbf5f24ff68e8034b82e5fd62 /ext/socket
parentdd8157f79fe9b620370e85f63da1828efb9aca1d (diff)
Free pthread_attr after setting up the thread
[bug #20149]
Diffstat (limited to 'ext/socket')
-rw-r--r--ext/socket/raddrinfo.c12
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;