From 1cdc2fb011d294c5d542334b52a70be9b0eb98b2 Mon Sep 17 00:00:00 2001 From: Robert Nishihara Date: Thu, 19 Oct 2017 17:07:03 -0700 Subject: [PATCH] Clean up event loop and callbacks when processes exit. (#1125) * Clean up event loop and callbacks when processes exit. * Fix bug. --- src/global_scheduler/global_scheduler.cc | 7 +++++++ src/local_scheduler/local_scheduler.cc | 2 ++ src/plasma/plasma_manager.cc | 4 ++++ 3 files changed, 13 insertions(+) diff --git a/src/global_scheduler/global_scheduler.cc b/src/global_scheduler/global_scheduler.cc index 2785caca9..ca305be74 100644 --- a/src/global_scheduler/global_scheduler.cc +++ b/src/global_scheduler/global_scheduler.cc @@ -121,6 +121,7 @@ GlobalSchedulerState *GlobalSchedulerState_init(event_loop *loop, const char *redis_primary_addr, int redis_primary_port) { GlobalSchedulerState *state = new GlobalSchedulerState(); + state->loop = loop; state->db = db_connect(std::string(redis_primary_addr), redis_primary_port, "global_scheduler", node_ip_address, 0, NULL); db_attach(state->db, loop, false); @@ -152,6 +153,12 @@ void GlobalSchedulerState_free(GlobalSchedulerState *state) { Task_free(pending_task); } state->pending_tasks.clear(); + + /* Destroy the event loop. */ + destroy_outstanding_callbacks(state->loop); + event_loop_destroy(state->loop); + state->loop = NULL; + /* Free the global scheduler state. */ delete state; } diff --git a/src/local_scheduler/local_scheduler.cc b/src/local_scheduler/local_scheduler.cc index 745a67062..12a58de59 100644 --- a/src/local_scheduler/local_scheduler.cc +++ b/src/local_scheduler/local_scheduler.cc @@ -197,7 +197,9 @@ void LocalSchedulerState_free(LocalSchedulerState *state) { /* Free the algorithm state. */ SchedulingAlgorithmState_free(state->algorithm_state); state->algorithm_state = NULL; + /* Destroy the event loop. */ + destroy_outstanding_callbacks(state->loop); event_loop_destroy(state->loop); state->loop = NULL; diff --git a/src/plasma/plasma_manager.cc b/src/plasma/plasma_manager.cc index 4ba80fb2d..aae16dcad 100644 --- a/src/plasma/plasma_manager.cc +++ b/src/plasma/plasma_manager.cc @@ -517,8 +517,12 @@ void PlasmaManagerState_free(PlasmaManagerState *state) { ARROW_CHECK_OK(state->plasma_conn->Disconnect()); delete state->plasma_conn; + + /* Destroy the event loop. */ destroy_outstanding_callbacks(state->loop); event_loop_destroy(state->loop); + state->loop = NULL; + delete state; }