diff options
author | Yusuke Endoh <mame@ruby-lang.org> | 2023-11-06 20:48:14 +0900 |
---|---|---|
committer | Yusuke Endoh <mame@ruby-lang.org> | 2023-11-07 04:39:09 +0900 |
commit | dc636fec2ae5ab5b5b0a7749a9ef1dffc393737c (patch) | |
tree | 97fdf86636eb431cfa5f810e7f1c90e868f28fc0 /ext/socket | |
parent | d0066211f2052bf1444ffeb11544860a12cebff2 (diff) |
Use pthread_attr_setaffinity_np instead of pthread_setaffinity_np
Diffstat (limited to 'ext/socket')
-rw-r--r-- | ext/socket/extconf.rb | 2 | ||||
-rw-r--r-- | ext/socket/raddrinfo.c | 30 |
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); |