diff --git a/deps/oblib/src/lib/alloc/memory_dump.cpp b/deps/oblib/src/lib/alloc/memory_dump.cpp index 55ecafae66..794d104de9 100644 --- a/deps/oblib/src/lib/alloc/memory_dump.cpp +++ b/deps/oblib/src/lib/alloc/memory_dump.cpp @@ -460,6 +460,7 @@ int label_stat(AChunk *chunk, ABlock *block, AObject *object, litem->count_ = 1; litem->block_cnt_ = 1; litem->chunk_cnt_ = 1; + ObSignalHandlerGuard guard(ob_signal_handler); ret = lmap.set_refactored(key, LabelInfoItem(litem, chunk, block)); } } @@ -484,6 +485,7 @@ int malloc_sample_stat(uint64_t tenant_id, uint64_t ctx_id, item->alloc_count_ += 1; item->alloc_bytes_ += offset; } else { + ObSignalHandlerGuard guard(ob_signal_handler); ret = malloc_sample_map.set_refactored(key, ObMallocSampleValue(1, offset)); } } diff --git a/deps/oblib/src/lib/signal/ob_signal_struct.h b/deps/oblib/src/lib/signal/ob_signal_struct.h index 7f1fd5bbaa..264cbb6d02 100644 --- a/deps/oblib/src/lib/signal/ob_signal_struct.h +++ b/deps/oblib/src/lib/signal/ob_signal_struct.h @@ -32,6 +32,22 @@ extern const int MP_SIG; // MP means MULTI-PURPOSE extern const int SIG_STACK_SIZE; extern uint64_t g_rlimit_core; +struct ObSignalHandlerGuard +{ +public: + ObSignalHandlerGuard(signal_handler_t handler) + : last_(get_signal_handler()) + { + get_signal_handler() = handler; + } + ~ObSignalHandlerGuard() + { + get_signal_handler() = last_; + } +private: + const signal_handler_t last_; +}; + class DTraceId { public: