diff --git a/features/FEATURE_BLE/ble/SecurityManager.h b/features/FEATURE_BLE/ble/SecurityManager.h index 5943b75933..5031d55d02 100644 --- a/features/FEATURE_BLE/ble/SecurityManager.h +++ b/features/FEATURE_BLE/ble/SecurityManager.h @@ -368,7 +368,7 @@ public: virtual void setSecurityManagerEventHandler(SecurityManagerEventHandler* handler) { if (handler) { - if (eventHandler != &defaultEventHandler) { + if (eventHandler && (eventHandler != &defaultEventHandler)) { delete eventHandler; } eventHandler = handler; diff --git a/features/FEATURE_BLE/ble/pal/PalSecurityManager.h b/features/FEATURE_BLE/ble/pal/PalSecurityManager.h index b4dd201402..5067faf562 100644 --- a/features/FEATURE_BLE/ble/pal/PalSecurityManager.h +++ b/features/FEATURE_BLE/ble/pal/PalSecurityManager.h @@ -149,15 +149,13 @@ public: /* Entry points for the underlying stack to report events back to the user. */ public: - /* guaranteed to return valid pointer */ - SecurityManagerEventHandler get_event_handler() { - return _event_handler; + SecurityManagerEventHandler& get_event_handler() { + /* guaranteed to be a valid pointer */ + return *_event_handler; } - void setSecurityManagerEventHandler(SecurityManagerEventHandler* event_handler) { - if (event_handler) { - _event_handler = event_handler; - } + void set_event_handler(SecurityManagerEventHandler &event_handler) { + _event_handler = &event_handler; } private: diff --git a/features/FEATURE_BLE/source/generic/GenericSecurityManager.cpp b/features/FEATURE_BLE/source/generic/GenericSecurityManager.cpp index 8cc8ad91c7..f0eee32422 100644 --- a/features/FEATURE_BLE/source/generic/GenericSecurityManager.cpp +++ b/features/FEATURE_BLE/source/generic/GenericSecurityManager.cpp @@ -99,10 +99,14 @@ public: return pal.set_passkey(passkey); } + void setSecurityManagerEventHandler(SecurityManagerEventHandler* handler) { + SecurityManager::setSecurityManagerEventHandler(handler); + pal.set_event_handler(*handler); + } + protected: GenericSecurityManager(ble::pal::SecurityManager& palImpl) : pal(palImpl), saveStateEnabled(false) { - eventHandler = new SecurityManagerEventHandler(); - pal.setSecurityManagerEventHandler(eventHandler); + pal.set_event_handler(defaultEventHandler); } public: