From 8bf430db4042ba050d65d9b55e45e692cff979bf Mon Sep 17 00:00:00 2001 From: Wang Yu Date: Fri, 18 Sep 2026 09:28:27 +0800 Subject: [PATCH] fix(run-queue): catch exceptions from parse_args and handle_event Signed-off-by: Wang Yu --- observe/run-queue.cpp | 33 +++++++++++++++++++++++---------- 1 file changed, 23 insertions(+), 10 deletions(-) diff --git a/observe/run-queue.cpp b/observe/run-queue.cpp index f4bffcf..02df678 100644 --- a/observe/run-queue.cpp +++ b/observe/run-queue.cpp @@ -79,7 +79,7 @@ struct BpfData char comm[16]; }; -static run_queue_bpf *obj; +static run_queue_bpf *obj = NULL; static int log_map_fd; static struct ring_buffer *rb = NULL; static int filter_fd; @@ -287,14 +287,20 @@ static int handle_event(void *ctx, void *data, size_t data_sz) const struct BpfData *log = (const struct BpfData *)data; // Cast data to // BpfData // structure - auto it = runqueques.find(log->cpu); - if (it == runqueques.end()) + try{ + auto it = runqueques.find(log->cpu); + if (it == runqueques.end()) + { + runqueques[log->cpu] = std::vector(); + } + + runqueques[log->cpu].push_back(*log); + } + catch (const std::bad_alloc &e) { - runqueques[log->cpu] = std::vector(); + pr_error("handle_event OOM: %s\n", e.what()); + return -1; } - - runqueques[log->cpu].push_back(*log); - return 0; } @@ -375,11 +381,18 @@ int main(int argc, char *args[]) exit(EXIT_FAILURE); } ssize_t rd_sz = 0; - - parse_args(argc, args); // Parse command line arguments + int key = 0; // Key for BPF map + try + { + parse_args(argc, args); // Parse command line arguments + } + catch(const std::exception& e) + { + fprintf(stderr, "run-queue: %s\n", e.what()); + goto cleanup; + } register_signal(); // Register signal handler - int key = 0; // Key for BPF map obj = run_queue_bpf::open_and_load(); // Load BPF program if (!obj) {