From 23b4e819ad6911c5bddbed13442e0bdf99a74dc9 Mon Sep 17 00:00:00 2001 From: Ludvig Strigeus Date: Fri, 23 Nov 2018 22:44:08 +0100 Subject: [PATCH] WgPeerExtraData now uses OnDestroy so lifetime can be controlled --- tunsafe_wg_plugin.cpp | 5 +++++ wireguard_proto.cpp | 3 ++- wireguard_proto.h | 3 ++- 3 files changed, 9 insertions(+), 2 deletions(-) diff --git a/tunsafe_wg_plugin.cpp b/tunsafe_wg_plugin.cpp index a873305..33ef486 100644 --- a/tunsafe_wg_plugin.cpp +++ b/tunsafe_wg_plugin.cpp @@ -171,6 +171,11 @@ class PluginPeer : public WgPeerExtraData { public: PluginPeer(TunsafePluginImpl *plugin, WgPeer *peer) : plugin(plugin), peer(peer), token_client_handler(this) {} ~PluginPeer(); + + virtual void OnPeerDestroy() override { + delete this; + } + WgPeer *peer; TunsafePluginImpl *plugin; TokenClientHandler token_client_handler; diff --git a/wireguard_proto.cpp b/wireguard_proto.cpp index 5d13fb8..2b97441 100644 --- a/wireguard_proto.cpp +++ b/wireguard_proto.cpp @@ -392,7 +392,8 @@ WgPeer::~WgPeer() { assert(curr_keypair_ == NULL && next_keypair_ == NULL && prev_keypair_ == NULL); assert(local_key_id_during_hs_ == 0); assert(first_queued_packet_ == NULL); - delete peer_extra_data_; + if (peer_extra_data_) + peer_extra_data_->OnPeerDestroy(); } void WgPeer::DelayedDelete(void *x) { diff --git a/wireguard_proto.h b/wireguard_proto.h index 6438003..f447cde 100644 --- a/wireguard_proto.h +++ b/wireguard_proto.h @@ -468,7 +468,8 @@ private: // Allows associating extradata with peers that can be used by plugins etc. class WgPeerExtraData { public: - virtual ~WgPeerExtraData() {} + // This is called when the peer is destroyed. + virtual void OnPeerDestroy() = 0; }; // State for peer