Wrap do_fast_fallback_getaddrinfo
with rb_thread_prevent_fork
(#12366)
Wrap `do_fast_fallback_getaddrinfo` with `rb_thread_prevent_fork` Referencing PR #10864, wrap `do_fast_fallback_getaddrinfo` with `rb_thread_prevent_fork` to avoid fork safety issues. `do_fast_fallback_getaddrinfo` internally uses getaddrinfo(3), leading to fork safety issues, as described in PR #10864. This change ensures that `do_fast_fallback_getaddrinfo` is guarded by `rb_thread_prevent_fork`, preventing fork during its execution and avoiding related issues.
This commit is contained in:
parent
98bf912d4b
commit
498d6eb114
Notes:
git
2024-12-18 00:48:46 +00:00
Merged-By: shioimm <shioi.mm@gmail.com>
@ -637,7 +637,7 @@ init_fast_fallback_inetsock_internal(VALUE v)
|
||||
}
|
||||
}
|
||||
|
||||
if (raddrinfo_pthread_create(&threads[i], do_fast_fallback_getaddrinfo, arg->getaddrinfo_entries[i]) != 0) {
|
||||
if (raddrinfo_pthread_create(&threads[i], fork_safe_do_fast_fallback_getaddrinfo, arg->getaddrinfo_entries[i]) != 0) {
|
||||
rsock_raise_resolution_error("getaddrinfo(3)", EAI_AGAIN);
|
||||
}
|
||||
pthread_detach(threads[i]);
|
||||
|
@ -3048,7 +3048,7 @@ free_fast_fallback_getaddrinfo_entry(struct fast_fallback_getaddrinfo_entry **en
|
||||
*entry = NULL;
|
||||
}
|
||||
|
||||
void *
|
||||
static void *
|
||||
do_fast_fallback_getaddrinfo(void *ptr)
|
||||
{
|
||||
struct fast_fallback_getaddrinfo_entry *entry = (struct fast_fallback_getaddrinfo_entry *)ptr;
|
||||
@ -3117,6 +3117,12 @@ do_fast_fallback_getaddrinfo(void *ptr)
|
||||
return 0;
|
||||
}
|
||||
|
||||
void *
|
||||
fork_safe_do_fast_fallback_getaddrinfo(void *ptr)
|
||||
{
|
||||
return rb_thread_prevent_fork(do_fast_fallback_getaddrinfo, ptr);
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
/*
|
||||
|
@ -447,7 +447,7 @@ struct fast_fallback_getaddrinfo_shared
|
||||
};
|
||||
|
||||
int raddrinfo_pthread_create(pthread_t *th, void *(*start_routine) (void *), void *arg);
|
||||
void *do_fast_fallback_getaddrinfo(void *ptr);
|
||||
void *fork_safe_do_fast_fallback_getaddrinfo(void *ptr);
|
||||
void free_fast_fallback_getaddrinfo_entry(struct fast_fallback_getaddrinfo_entry **entry);
|
||||
void free_fast_fallback_getaddrinfo_shared(struct fast_fallback_getaddrinfo_shared **shared);
|
||||
# endif
|
||||
|
Loading…
x
Reference in New Issue
Block a user