Skip to content

Commit f868955

Browse files
authored
windows: Fix memory leak in adapter.Scan (#383)
* Properly release acquired resources in getScanResultFromArgs * Simplify code
1 parent 1b9deaa commit f868955

File tree

1 file changed

+15
-7
lines changed

1 file changed

+15
-7
lines changed

gap_windows.go

Lines changed: 15 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -224,25 +224,33 @@ func getScanResultFromArgs(args *advertisement.BluetoothLEAdvertisementReceivedE
224224
Address: adr,
225225
}
226226

227+
winAdv, err := args.GetAdvertisement()
228+
if err != nil {
229+
return result
230+
}
231+
defer winAdv.Release()
232+
227233
var manufacturerData []ManufacturerDataElement
228-
if winAdv, err := args.GetAdvertisement(); err == nil && winAdv != nil {
229-
vector, _ := winAdv.GetManufacturerData()
230-
size, _ := vector.GetSize()
231-
for i := uint32(0); i < size; i++ {
232-
element, _ := vector.GetAt(i)
234+
mVector, _ := winAdv.GetManufacturerData()
235+
if mVector != nil {
236+
defer mVector.Release()
237+
mSize, _ := mVector.GetSize()
238+
for i := uint32(0); i < mSize; i++ {
239+
element, _ := mVector.GetAt(i)
233240
manData := (*advertisement.BluetoothLEManufacturerData)(element)
234241
companyID, _ := manData.GetCompanyId()
235242
buffer, _ := manData.GetData()
236243
manufacturerData = append(manufacturerData, ManufacturerDataElement{
237244
CompanyID: companyID,
238245
Data: bufferToSlice(buffer),
239246
})
247+
buffer.Release()
248+
manData.Release()
240249
}
241250
}
242251

243252
// Note: the IsRandom bit is never set.
244-
advertisement, _ := args.GetAdvertisement()
245-
localName, _ := advertisement.GetLocalName()
253+
localName, _ := winAdv.GetLocalName()
246254
result.AdvertisementPayload = &advertisementFields{
247255
AdvertisementFields{
248256
LocalName: localName,

0 commit comments

Comments
 (0)