diff --git a/gap_windows.go b/gap_windows.go index 742ef33..7a6c229 100644 --- a/gap_windows.go +++ b/gap_windows.go @@ -224,12 +224,21 @@ func getScanResultFromArgs(args *advertisement.BluetoothLEAdvertisementReceivedE Address: adr, } + winAdv, err := args.GetAdvertisement() + if winAdv != nil { + defer winAdv.Release() + } + if err != nil { + return result + } + var manufacturerData []ManufacturerDataElement - if winAdv, err := args.GetAdvertisement(); err == nil && winAdv != nil { - vector, _ := winAdv.GetManufacturerData() - size, _ := vector.GetSize() - for i := uint32(0); i < size; i++ { - element, _ := vector.GetAt(i) + mVector, _ := winAdv.GetManufacturerData() + if mVector != nil { + defer mVector.Release() + mSize, _ := mVector.GetSize() + for i := uint32(0); i < mSize; i++ { + element, _ := mVector.GetAt(i) manData := (*advertisement.BluetoothLEManufacturerData)(element) companyID, _ := manData.GetCompanyId() buffer, _ := manData.GetData() @@ -237,12 +246,13 @@ func getScanResultFromArgs(args *advertisement.BluetoothLEAdvertisementReceivedE CompanyID: companyID, Data: bufferToSlice(buffer), }) + buffer.Release() + manData.Release() } } // Note: the IsRandom bit is never set. - advertisement, _ := args.GetAdvertisement() - localName, _ := advertisement.GetLocalName() + localName, _ := winAdv.GetLocalName() result.AdvertisementPayload = &advertisementFields{ AdvertisementFields{ LocalName: localName,