plugin_sched_init_context() is careful to make the sched_waking (or sched_wakeup{,_new}) event optional but the initializer blindly dereferences plugin_ctx->sched_waking_event which is null if no waking event is found. Add the necessary checks to avoid segfaults when (de)initializing the plugin. Signed-off-by: John Keeping <john@xxxxxxxxxxxx> --- src/plugins/sched_events.c | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/src/plugins/sched_events.c b/src/plugins/sched_events.c index 83c2520..198ed49 100644 --- a/src/plugins/sched_events.c +++ b/src/plugins/sched_events.c @@ -193,9 +193,11 @@ int KSHARK_PLOT_PLUGIN_INITIALIZER(struct kshark_data_stream *stream) plugin_ctx->sched_switch_event->id, plugin_sched_swith_action); - kshark_register_event_handler(stream, - plugin_ctx->sched_waking_event->id, - plugin_sched_wakeup_action); + if (plugin_ctx->sched_waking_event) { + kshark_register_event_handler(stream, + plugin_ctx->sched_waking_event->id, + plugin_sched_wakeup_action); + } kshark_register_draw_handler(stream, plugin_draw); @@ -213,9 +215,11 @@ int KSHARK_PLOT_PLUGIN_DEINITIALIZER(struct kshark_data_stream *stream) plugin_ctx->sched_switch_event->id, plugin_sched_swith_action); - kshark_unregister_event_handler(stream, - plugin_ctx->sched_waking_event->id, - plugin_sched_wakeup_action); + if (plugin_ctx->sched_waking_event) { + kshark_unregister_event_handler(stream, + plugin_ctx->sched_waking_event->id, + plugin_sched_wakeup_action); + } kshark_unregister_draw_handler(stream, plugin_draw); -- 2.33.0