From 65e11498d4f6232d1178ff4992e30e5960d3d8c7 Mon Sep 17 00:00:00 2001 From: Matthias Koefferlein Date: Sun, 6 Nov 2022 16:53:26 +0100 Subject: [PATCH] Fixed issue #1178 (technology-data xml results in SEGV) Problem was that the test case contained multiple technologies inside the config file and the cached values were not updated in the XML reader upon migrating to the new multi-stack capable scheme. --- .../net_tracer/db_plugin/dbNetTracerPlugin.cc | 17 +++++++---------- 1 file changed, 7 insertions(+), 10 deletions(-) diff --git a/src/plugins/tools/net_tracer/db_plugin/dbNetTracerPlugin.cc b/src/plugins/tools/net_tracer/db_plugin/dbNetTracerPlugin.cc index e9b442f7b..67cc68b9d 100644 --- a/src/plugins/tools/net_tracer/db_plugin/dbNetTracerPlugin.cc +++ b/src/plugins/tools/net_tracer/db_plugin/dbNetTracerPlugin.cc @@ -88,30 +88,27 @@ template struct FallbackXMLWriteAdaptor { FallbackXMLWriteAdaptor (void (db::NetTracerConnectivity::*member) (const Value &), void (db::NetTracerConnectivity::*clear) ()) - : mp_member (member), mp_clear (clear), mp_stack (0) + : mp_member (member), mp_clear (clear) { // .. nothing yet .. } void operator () (db::NetTracerTechnologyComponent &owner, tl::XMLReaderState &reader) const { - if (! mp_stack) { - mp_stack = const_cast (get_default (owner)); - if (! mp_stack) { - owner.push_back (db::NetTracerConnectivity ()); - mp_stack = (owner.end () - 1).operator-> (); - } - (mp_stack->*mp_clear) (); + db::NetTracerConnectivity *stack = const_cast (get_default (owner)); + if (! stack) { + owner.push_back (db::NetTracerConnectivity ()); + stack = (owner.end () - 1).operator-> (); } + (stack->*mp_clear) (); tl::XMLObjTag tag; - (mp_stack->*mp_member) (*reader.back (tag)); + (stack->*mp_member) (*reader.back (tag)); } private: void (db::NetTracerConnectivity::*mp_member) (const Value &); void (db::NetTracerConnectivity::*mp_clear) (); - mutable db::NetTracerConnectivity *mp_stack; }; template