Skip to content
Snippets Groups Projects
Commit d7976982 authored by François-Simon Fauteux-Chapleau's avatar François-Simon Fauteux-Chapleau
Browse files

pupnp: unregister libupnp client handle when clearing IGDs

The PUPnP::clearIgds function is called when the UPnP context is
stopped. We don't want to keep receiving and processing IGD events after
that point, so we need to unregister our libupnp "client handle".

GitLab: #29
Change-Id: I017e6ec8aea1423d63381c9e5b3952cff7dfeb2e
parent 808db4f6
No related branches found
No related tags found
No related merge requests found
......@@ -174,6 +174,18 @@ PUPnP::registerClient()
}
}
void
PUPnP::unregisterClient()
{
int upnp_err = UpnpUnRegisterClient(ctrlptHandle_);
if (upnp_err != UPNP_E_SUCCESS) {
if (logger_) logger_->error("PUPnP: Failed to unregister client: {}", UpnpGetErrorMessage(upnp_err));
} else {
if (logger_) logger_->debug("PUPnP: Successfully unregistered client");
clientRegistered_ = false;
}
}
void
PUPnP::setObserver(UpnpMappingObserver* obs)
{
......@@ -264,6 +276,12 @@ PUPnP::clearIgds()
{
// JAMI_DBG("PUPnP: clearing IGDs and devices lists");
// We need to unregister the client to make sure that we don't keep receiving and
// processing IGD-related events unnecessarily, see:
// https://git.jami.net/savoirfairelinux/dhtnet/-/issues/29
if (clientRegistered_)
unregisterClient();
searchForIgdTimer_.cancel();
igdSearchCounter_ = 0;
......
......@@ -124,6 +124,9 @@ private:
// Register the client
void registerClient();
// Unregister the client
void unregisterClient();
// Start search for UPNP devices
void searchForDevices();
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment