From 52e0bd09f88044e3541cb372ee42b3ab76b77a88 Mon Sep 17 00:00:00 2001 From: Michael Davidsaver Date: Mon, 17 Sep 2018 12:01:52 -0700 Subject: [PATCH] sharedpv: defend against dying objects in SharedPV::close() Likely when destroy=true --- src/server/sharedstate_pv.cpp | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/server/sharedstate_pv.cpp b/src/server/sharedstate_pv.cpp index acb388f..20f56ee 100644 --- a/src/server/sharedstate_pv.cpp +++ b/src/server/sharedstate_pv.cpp @@ -246,10 +246,14 @@ void SharedPV::close(bool destroy) } FOR_EACH(monitors_t::const_iterator, it, end, monitors) { (*it)->close(); - p_monitor.push_back((*it)->shared_from_this()); + try { + p_monitor.push_back((*it)->shared_from_this()); + }catch(std::tr1::bad_weak_ptr&) { /* ignore, racing dtor */ } } FOR_EACH(channels_t::const_iterator, it, end, channels) { - p_channel.push_back((*it)->shared_from_this()); + try { + p_channel.push_back((*it)->shared_from_this()); + }catch(std::tr1::bad_weak_ptr&) { /* ignore, racing dtor */ } } type.reset();