hermes: Fix memory leak due to non-virtual destructor
Create ManagerDbusInterface to provide a virtual destructor for
ManagerDbusAdaptor.
BUG=b:165661132
TEST=Ran valgrind on hatch. Procedure at https://groups.google.com/a/google.com/g/chromeos-chatty-eng/c/Sar_iRtykzU/m/HGE-yu-fBQAJ
Change-Id: I42f095a6b553217551d8cc529aa097d930aa7eb9
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform2/+/2412782
Reviewed-by: Pavan Holla <pholla@google.com>
Reviewed-by: Steven Bennetts <stevenjb@chromium.org>
Tested-by: Pavan Holla <pholla@google.com>
Commit-Queue: Pavan Holla <pholla@google.com>
diff --git a/hermes/adaptor_factory.cc b/hermes/adaptor_factory.cc
index ce065cc..949fdbe 100644
--- a/hermes/adaptor_factory.cc
+++ b/hermes/adaptor_factory.cc
@@ -14,8 +14,8 @@
return std::make_unique<EuiccDBusAdaptor>(euicc);
}
-std::unique_ptr<org::chromium::Hermes::ManagerAdaptor>
-AdaptorFactory::CreateManagerAdaptor(Manager* manager) {
+std::unique_ptr<ManagerAdaptorInterface> AdaptorFactory::CreateManagerAdaptor(
+ Manager* manager) {
return std::make_unique<ManagerDBusAdaptor>(manager);
}
diff --git a/hermes/adaptor_factory.h b/hermes/adaptor_factory.h
index 95a5402..a258f66 100644
--- a/hermes/adaptor_factory.h
+++ b/hermes/adaptor_factory.h
@@ -15,7 +15,7 @@
public:
std::unique_ptr<EuiccAdaptorInterface> CreateEuiccAdaptor(
Euicc* euicc) override;
- std::unique_ptr<org::chromium::Hermes::ManagerAdaptor> CreateManagerAdaptor(
+ std::unique_ptr<ManagerAdaptorInterface> CreateManagerAdaptor(
Manager* manager) override;
};
diff --git a/hermes/adaptor_factory_interface.h b/hermes/adaptor_factory_interface.h
index 28c9117..2f83d94 100644
--- a/hermes/adaptor_factory_interface.h
+++ b/hermes/adaptor_factory_interface.h
@@ -21,8 +21,8 @@
virtual ~AdaptorFactoryInterface() = default;
virtual std::unique_ptr<EuiccAdaptorInterface> CreateEuiccAdaptor(
Euicc* euicc) = 0;
- virtual std::unique_ptr<org::chromium::Hermes::ManagerAdaptor>
- CreateManagerAdaptor(Manager* manager) = 0;
+ virtual std::unique_ptr<ManagerAdaptorInterface> CreateManagerAdaptor(
+ Manager* manager) = 0;
};
} // namespace hermes
diff --git a/hermes/adaptor_interfaces.h b/hermes/adaptor_interfaces.h
index 84349d5..e3a2001 100644
--- a/hermes/adaptor_interfaces.h
+++ b/hermes/adaptor_interfaces.h
@@ -6,6 +6,7 @@
#define HERMES_ADAPTOR_INTERFACES_H_
#include "hermes/dbus_bindings/org.chromium.Hermes.Euicc.h"
+#include "hermes/dbus_bindings/org.chromium.Hermes.Manager.h"
namespace hermes {
@@ -19,6 +20,14 @@
virtual dbus::ObjectPath object_path() const = 0;
};
+class ManagerAdaptorInterface : public org::chromium::Hermes::ManagerAdaptor {
+ public:
+ explicit ManagerAdaptorInterface(
+ org::chromium::Hermes::ManagerInterface* interface)
+ : org::chromium::Hermes::ManagerAdaptor(interface) {}
+ virtual ~ManagerAdaptorInterface() = default;
+};
+
} // namespace hermes
#endif // HERMES_ADAPTOR_INTERFACES_H_
diff --git a/hermes/manager.h b/hermes/manager.h
index 6fcc258..83d7022 100644
--- a/hermes/manager.h
+++ b/hermes/manager.h
@@ -31,7 +31,7 @@
void UpdateAvailableEuiccsProperty();
Context* context_;
- std::unique_ptr<org::chromium::Hermes::ManagerAdaptor> dbus_adaptor_;
+ std::unique_ptr<ManagerAdaptorInterface> dbus_adaptor_;
// Map of physical SIM slot -> Euicc.
std::map<uint8_t, std::unique_ptr<Euicc>> available_euiccs_;
diff --git a/hermes/manager_dbus_adaptor.cc b/hermes/manager_dbus_adaptor.cc
index ca0387a..6ab9cd9 100644
--- a/hermes/manager_dbus_adaptor.cc
+++ b/hermes/manager_dbus_adaptor.cc
@@ -19,7 +19,7 @@
namespace hermes {
ManagerDBusAdaptor::ManagerDBusAdaptor(Manager* manager)
- : org::chromium::Hermes::ManagerAdaptor(this),
+ : ManagerAdaptorInterface(this),
manager_(manager),
dbus_object_(nullptr,
Context::Get()->bus(),
diff --git a/hermes/manager_dbus_adaptor.h b/hermes/manager_dbus_adaptor.h
index c78b527..673e6da 100644
--- a/hermes/manager_dbus_adaptor.h
+++ b/hermes/manager_dbus_adaptor.h
@@ -5,6 +5,7 @@
#ifndef HERMES_MANAGER_DBUS_ADAPTOR_H_
#define HERMES_MANAGER_DBUS_ADAPTOR_H_
+#include "hermes/adaptor_interfaces.h"
#include "hermes/dbus_bindings/org.chromium.Hermes.Manager.h"
namespace hermes {
@@ -12,7 +13,7 @@
class Manager;
class ManagerDBusAdaptor : public org::chromium::Hermes::ManagerInterface,
- public org::chromium::Hermes::ManagerAdaptor {
+ public ManagerAdaptorInterface {
public:
explicit ManagerDBusAdaptor(Manager* manager);