# HG changeset patch # User Paul Boddie # Date 1679498104 -3600 # Node ID 07dd3f43693ea16e974ca8b7e1a6ac485d2db4a4 # Parent 9e172f6a72717da590af8e3fdaeca956e8cac3fc Record all server details to permit their deallocation. diff -r 9e172f6a7271 -r 07dd3f43693e libnotifier/include/notifier/notifier.h --- a/libnotifier/include/notifier/notifier.h Wed Mar 22 16:14:29 2023 +0100 +++ b/libnotifier/include/notifier/notifier.h Wed Mar 22 16:15:04 2023 +0100 @@ -25,6 +25,7 @@ #include #include #include +#include #include #include @@ -62,6 +63,8 @@ typedef std::map ObjectNotificationStates; typedef std::map ObjectStateLocks; +typedef std::vector ServerConfigs; + /* An object for monitoring object event notifications. */ @@ -83,7 +86,7 @@ /* Notifier resource details. */ - ipc_server_config_type *_config = NULL; + ServerConfigs _configs; bool _started = false; /* Convenience method to access object state. */ diff -r 9e172f6a7271 -r 07dd3f43693e libnotifier/lib/src/notifier.cc --- a/libnotifier/lib/src/notifier.cc Wed Mar 22 16:14:29 2023 +0100 +++ b/libnotifier/lib/src/notifier.cc Wed Mar 22 16:15:04 2023 +0100 @@ -81,6 +81,12 @@ ObjectNotifier::~ObjectNotifier() { + ServerConfigs::iterator it; + + for (it = _configs.begin(); it != _configs.end(); it++) + delete *it; + + _configs.clear(); } @@ -102,7 +108,7 @@ if (err) return err; - _config = server.config(); + _configs.push_back(server.config()); _started = true; return L4_EOK; @@ -146,11 +152,12 @@ NotifierResource *resource = new NotifierResource(this, object); ResourceServer server(resource); - long err = server.start_in_thread(_config->thread, false); + long err = server.start_in_thread(_configs.front()->thread, false); if (err) return err; + _configs.push_back(server.config()); state.endpoint = server.config()->server; } @@ -204,9 +211,7 @@ -/* Handle a notification event for an object. Ideally, this would be invoked by - the generic server dispatch mechanism, with the gate label being interpreted - and provided as the first parameter. */ +/* Handle a notification event for an object. */ void GeneralObjectNotifier::notify(notifiable_t *object, notify_flags_t flags, notify_values_t values)