fix: stabilize runtime follow-up regressions
This commit is contained in:
+11
-4
@@ -18,7 +18,10 @@ static sigjmp_buf request_fault_jmp;
|
||||
static volatile sig_atomic_t request_fault_active = 0;
|
||||
static volatile sig_atomic_t request_fault_signal = 0;
|
||||
static Request* request_fault_request = 0;
|
||||
static String request_fault_trace = "";
|
||||
// Raw frame pointers only: the signal handler must not allocate, so frames are
|
||||
// captured here and symbolized after the siglongjmp.
|
||||
static void* request_fault_frames[64];
|
||||
static volatile sig_atomic_t request_fault_frame_count = 0;
|
||||
static int websocket_exec_fd = -1;
|
||||
static String websocket_exec_read_buffer = "";
|
||||
static std::deque<DTree> websocket_exec_pending_jobs;
|
||||
@@ -105,7 +108,7 @@ void on_request_fault_signal(int sig)
|
||||
request_fault_signal = sig;
|
||||
if(request_fault_active && request_fault_request)
|
||||
{
|
||||
request_fault_trace = capture_backtrace_string(32, 1);
|
||||
request_fault_frame_count = backtrace(request_fault_frames, 64);
|
||||
siglongjmp(request_fault_jmp, 1);
|
||||
}
|
||||
on_segfault(sig);
|
||||
@@ -887,7 +890,7 @@ int handle_complete(FastCGIRequest& request) {
|
||||
request_fault_request = &request;
|
||||
request_fault_active = 1;
|
||||
request_fault_signal = 0;
|
||||
request_fault_trace = "";
|
||||
request_fault_frame_count = 0;
|
||||
install_request_fault_handlers();
|
||||
|
||||
String failure_title = "";
|
||||
@@ -898,7 +901,7 @@ int handle_complete(FastCGIRequest& request) {
|
||||
{
|
||||
failure_title = "fatal signal during request";
|
||||
failure_details = "worker recovered before closing the upstream connection";
|
||||
failure_trace = request_fault_trace;
|
||||
failure_trace = backtrace_frames_string(request_fault_frames, request_fault_frame_count, 1);
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -1502,6 +1505,10 @@ void init_base_process()
|
||||
|
||||
int main(int argc, char** argv)
|
||||
{
|
||||
// Warm up libgcc's backtrace state so the first in-handler backtrace()
|
||||
// after a fault does not allocate.
|
||||
backtrace(request_fault_frames, 4);
|
||||
|
||||
init_base_process();
|
||||
ensure_proactive_compiler();
|
||||
|
||||
|
||||
Reference in New Issue
Block a user