From f004b4bf3fa8d5fd036f8e4084dfdea0cce50299 Mon Sep 17 00:00:00 2001 From: Steffen Vogel Date: Fri, 2 Nov 2018 14:56:07 +0100 Subject: [PATCH] api: avoid segfault due to gone sessions --- lib/api.cpp | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/lib/api.cpp b/lib/api.cpp index bdf5f6d1a..3a785560d 100644 --- a/lib/api.cpp +++ b/lib/api.cpp @@ -68,7 +68,7 @@ void Api::stop() for (Session *s : sessions) s->shutdown(); - for (int i = 0; i < 10 && sessions.size() > 0; i++) { + for (int i = 0; i < 2 && sessions.size() > 0; i++) { logger->info("Waiting for {} sessions to terminate", sessions.size()); usleep(1 * 1e6); } @@ -89,8 +89,14 @@ void Api::run() /* Process pending actions */ Session *s = pending.pop(); - if (s) + if (s) { + /* Check that the session is still alive */ + auto it = std::find(sessions.begin(), sessions.end(), s); + if (it == sessions.end()) + return; + s->runPendingActions(); + } } void Api::worker()