Skip to content

Commit af29ce6

Browse files
[Linux] Fix mDNSResolver memory leak (#31709)
* [Linux] fix memory leak * [Python] call StopDiscovery after DiscoveryNodes --------- Co-authored-by: Andrei Litvin <andy314@gmail.com>
1 parent 935aa45 commit af29ce6

File tree

3 files changed

+13
-1
lines changed

3 files changed

+13
-1
lines changed

src/controller/python/ChipDeviceController-Discovery.cpp

+5
Original file line numberDiff line numberDiff line change
@@ -89,6 +89,11 @@ PyChipError pychip_DeviceController_DiscoverCommissionableNodes(Controller::Devi
8989
return ToPyChipError(devCtrl->DiscoverCommissionableNodes(filter));
9090
}
9191

92+
PyChipError pychip_DeviceController_StopCommissionableDiscovery(Controller::DeviceCommissioner * devCtrl)
93+
{
94+
return ToPyChipError(devCtrl->StopCommissionableDiscovery());
95+
}
96+
9297
void pychip_DeviceController_IterateDiscoveredCommissionableNodes(Controller::DeviceCommissioner * devCtrl,
9398
IterateDiscoveredCommissionableNodesFunct cb)
9499
{

src/controller/python/chip/ChipDeviceCtrl.py

+7
Original file line numberDiff line numberDiff line change
@@ -594,6 +594,9 @@ def DiscoverCommissionableNodes(self, filterType: discovery.FilterType = discove
594594
else:
595595
time.sleep(timeoutSecond)
596596

597+
self._ChipStack.Call(
598+
lambda: self._dmLib.pychip_DeviceController_StopCommissionableDiscovery(self.devCtrl)).raise_on_error()
599+
597600
return self.GetDiscoveredDevices()
598601

599602
def DiscoverCommissionableNodesLongDiscriminator(self, long_discriminator):
@@ -1567,6 +1570,10 @@ def _InitLib(self):
15671570
c_void_p, c_uint8, c_char_p]
15681571
self._dmLib.pychip_DeviceController_DiscoverCommissionableNodes.restype = PyChipError
15691572

1573+
self._dmLib.pychip_DeviceController_StopCommissionableDiscovery.argtypes = [
1574+
c_void_p]
1575+
self._dmLib.pychip_DeviceController_StopCommissionableDiscovery.restype = PyChipError
1576+
15701577
self._dmLib.pychip_DeviceController_DiscoverCommissionableNodesLongDiscriminator.argtypes = [
15711578
c_void_p, c_uint16]
15721579
self._dmLib.pychip_DeviceController_DiscoverCommissionableNodesLongDiscriminator.restype = PyChipError

src/platform/Linux/DnssdImpl.cpp

+1-1
Original file line numberDiff line numberDiff line change
@@ -893,7 +893,7 @@ void MdnsAvahi::HandleResolve(AvahiServiceResolver * resolver, AvahiIfIndex inte
893893
avahi_service_resolver_free(resolver);
894894
context->mResolver = avahi_service_resolver_new(
895895
context->mInstance->mClient, context->mInterface, context->mTransport, context->mName, context->mFullType.c_str(),
896-
nullptr, context->mAddressType, static_cast<AvahiLookupFlags>(0), HandleResolve, context);
896+
nullptr, context->mAddressType, static_cast<AvahiLookupFlags>(0), HandleResolve, userdata);
897897
if (context->mResolver == nullptr)
898898
{
899899
ChipLogError(DeviceLayer, "Avahi resolve failed on retry");

0 commit comments

Comments
 (0)