fix(server): notify characteristics on client disconnect#393
Open
m-mcgowan wants to merge 1 commit intoh2zero:masterfrom
Open
fix(server): notify characteristics on client disconnect#393m-mcgowan wants to merge 1 commit intoh2zero:masterfrom
m-mcgowan wants to merge 1 commit intoh2zero:masterfrom
Conversation
When a client disconnects, iterate through all services and characteristics and call processSubRequest with subValue=0 for any that had subscriptions from the disconnecting client. This ensures that application callbacks (onSubscribe) are properly notified when a client disconnects, allowing them to clean up their subscription state. Previously, the onSubscribe callback was only called when the client explicitly unsubscribed by writing to the CCCD, not when the connection was terminated. This fixes issues where: - Subscriber counts would not decrement on disconnect - Blocking reads would hang forever waiting for unsubscribe notification - Applications could not detect client disconnection via characteristic callbacks
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
When a BLE client disconnects, characteristics with active subscriptions are not notified. This leaves applications with stale subscription state, causing issues with reconnection.
This PR adds code to the
BLE_GAP_EVENT_DISCONNECThandler to iterate through all characteristics and callprocessSubRequest(peerInfo, 0)for any that had active subscriptions from the disconnecting client.Problem
Applications using wrappers like NuS-NimBLE-Serial track subscriber counts via the
onSubscribecallback. Without this fix:onSubscribe(subValue=1)called → count = 1Solution
In
BLE_GAP_EVENT_DISCONNECT, before callingonDisconnect:processSubRequest(peerInfo, 0)to trigger theonSubscribecallback withsubValue=0This ensures:
onSubscribecallback is called withsubValue=0Testing
Tested with ESP32-S3 using the ESP-IDF framework (with Arduino as a component) and NuS-NimBLE-Serial. Before the fix, reconnection after disconnect would fail. After the fix, reconnection works reliably.
Note
An equivalent fix has been submitted to NimBLE-Arduino (#1081 in h2zero/NimBLE-Arduino) for Arduino-only builds.