Actions
Bug #14882
closedOpenSSL::PKey::*.new does not resume after spurious signals
Description
I noticed some OpenSSL::PKey::*.new failures while working on [Bug #14867].
MJIT will fork processes and when they die, SIGCHLD will trigger on most OSes.
I work around this problem in ext/openssl (and possibly other exts) by
avoiding signal_enqueue if no Ruby-level trap(:CHLD) handler is defined:
(in signal.c::sighandler):
/* avoid spurious wakeup in main thread iff nobody uses trap(:CHLD) */
if (vm && ACCESS_ONCE(VALUE, vm->trap_list.cmd[sig])) {
signal_enque(sig);
}
However, other signals may be received that do not intend to permanently
stop the operation.
Attached is a script which demonstrates the problem.
When performing normal interruptible operations (e.g. IO#read),
Ruby automatically retries on EINTR, so I think OpenSSL::PKey::*.new
should do the same instead of failing completely.
I do not use proprietary messaging systems, so please forward to
the other bug tracker if you don't want to use this one. Thanks.
Files
Actions
Like0
Like0