Skip to content

fix(windows): close leaked resources#453

Open
acouvreur wants to merge 1 commit into
devfrom
windows-memory-leaks
Open

fix(windows): close leaked resources#453
acouvreur wants to merge 1 commit into
devfrom
windows-memory-leaks

Conversation

@acouvreur
Copy link
Copy Markdown
Member

A lot of resources were not closed. Closes #451

A lot of resources were not closed. Closes #451
@acouvreur acouvreur requested a review from jagobagascon May 20, 2026 03:02
@acouvreur
Copy link
Copy Markdown
Member Author

@jagobagascon any input here on those missing .Release() calls that I've identified ?

Does it seem legit to you ?

Copy link
Copy Markdown

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR targets Windows-specific memory/resource leaks in the BLE central implementation, addressing issue #451 by ensuring WinRT objects (async operations, result objects, buffers, vector views, readers) are properly released after use.

Changes:

  • Add Release() defers for WinRT async operations and result/vector objects in GATT service/characteristic discovery.
  • Release buffers/readers/results used in GATT characteristic write/read and notification handling.
  • Release WinRT objects created during scan result parsing and during Adapter.Connect (async ops and device ID).

Reviewed changes

Copilot reviewed 2 out of 2 changed files in this pull request and generated 1 comment.

File Description
gattc_windows.go Adds Release() calls for WinRT async ops/results/buffers used by GATT service/characteristic discovery, read/write, and notifications.
gap_windows.go Adds Release() calls for WinRT advertisement vectors/elements/buffers during scan parsing and releases WinRT async ops used during connect/session creation.

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment thread gap_windows.go
Comment on lines 242 to 256
for i := uint32(0); i < size; i++ {
element, _ := vector.GetAt(i)
element, _ := manDataVector.GetAt(i)
manData := (*advertisement.BluetoothLEManufacturerData)(element)

companyID, _ := manData.GetCompanyId()
buffer, _ := manData.GetData()
manufacturerData = append(manufacturerData, ManufacturerDataElement{
CompanyID: companyID,
Data: bufferToSlice(buffer),
})
if buffer != nil {
manufacturerData = append(manufacturerData, ManufacturerDataElement{
CompanyID: companyID,
Data: bufferToSlice(buffer),
})
buffer.Release()
}
manData.Release()
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

windows: Adapter.Scan and DeviceCharacteristic.Read memory leaks

2 participants