summaryrefslogtreecommitdiff
path: root/ext/socket
diff options
context:
space:
mode:
authorYusuke Endoh <mame@ruby-lang.org>2023-11-06 20:48:14 +0900
committerYusuke Endoh <mame@ruby-lang.org>2023-11-07 04:39:09 +0900
commitdc636fec2ae5ab5b5b0a7749a9ef1dffc393737c (patch)
tree97fdf86636eb431cfa5f810e7f1c90e868f28fc0 /ext/socket
parentd0066211f2052bf1444ffeb11544860a12cebff2 (diff)
Use pthread_attr_setaffinity_np instead of pthread_setaffinity_np
Diffstat (limited to 'ext/socket')
-rw-r--r--ext/socket/extconf.rb2
-rw-r--r--ext/socket/raddrinfo.c30
2 files changed, 21 insertions, 11 deletions
diff --git a/ext/socket/extconf.rb b/ext/socket/extconf.rb
index 6eec869d69..1ca52da366 100644
--- a/ext/socket/extconf.rb
+++ b/ext/socket/extconf.rb
@@ -704,7 +704,7 @@ SRC
have_func("pthread_create")
have_func("pthread_detach")
- have_func("pthread_setaffinity_np")
+ have_func("pthread_attr_setaffinity_np")
have_func("sched_getcpu")
$VPATH << '$(topdir)' << '$(top_srcdir)'
diff --git a/ext/socket/raddrinfo.c b/ext/socket/raddrinfo.c
index f5c8ca592a..fc1213e0fa 100644
--- a/ext/socket/raddrinfo.c
+++ b/ext/socket/raddrinfo.c
@@ -475,18 +475,23 @@ start:
return EAI_MEMORY;
}
- pthread_t th;
- if (pthread_create(&th, 0, do_getaddrinfo, arg) != 0) {
+ pthread_attr_t attr;
+ if (pthread_attr_init(&attr) != 0) {
free_getaddrinfo_arg(arg);
return EAI_AGAIN;
}
-
-#if defined(HAVE_PTHREAD_SETAFFINITY_NP) && defined(HAVE_SCHED_GETCPU)
+#if defined(HAVE_PTHREAD_ATTR_SETAFFINITY_NP) && defined(HAVE_SCHED_GETCPU)
cpu_set_t tmp_cpu_set;
CPU_ZERO(&tmp_cpu_set);
CPU_SET(sched_getcpu(), &tmp_cpu_set);
- pthread_setaffinity_np(th, sizeof(cpu_set_t), &tmp_cpu_set);
+ pthread_attr_setaffinity_np(&attr, sizeof(cpu_set_t), &tmp_cpu_set);
#endif
+
+ pthread_t th;
+ if (pthread_create(&th, &attr, do_getaddrinfo, arg) != 0) {
+ free_getaddrinfo_arg(arg);
+ return EAI_AGAIN;
+ }
pthread_detach(th);
rb_thread_call_without_gvl2(wait_getaddrinfo, arg, cancel_getaddrinfo, arg);
@@ -694,18 +699,23 @@ start:
return EAI_MEMORY;
}
- pthread_t th;
- if (pthread_create(&th, 0, do_getnameinfo, arg) != 0) {
+ pthread_attr_t attr;
+ if (pthread_attr_init(&attr) != 0) {
free_getnameinfo_arg(arg);
return EAI_AGAIN;
}
-
-#if defined(HAVE_PTHREAD_SETAFFINITY_NP) && defined(HAVE_SCHED_GETCPU)
+#if defined(HAVE_PTHREAD_ATTR_SETAFFINITY_NP) && defined(HAVE_SCHED_GETCPU)
cpu_set_t tmp_cpu_set;
CPU_ZERO(&tmp_cpu_set);
CPU_SET(sched_getcpu(), &tmp_cpu_set);
- pthread_setaffinity_np(th, sizeof(cpu_set_t), &tmp_cpu_set);
+ pthread_attr_setaffinity_np(&attr, sizeof(cpu_set_t), &tmp_cpu_set);
#endif
+
+ pthread_t th;
+ if (pthread_create(&th, 0, do_getnameinfo, arg) != 0) {
+ free_getnameinfo_arg(arg);
+ return EAI_AGAIN;
+ }
pthread_detach(th);
rb_thread_call_without_gvl2(wait_getnameinfo, arg, cancel_getnameinfo, arg);