Added SetHeartbeatHandler to Session interface #25
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.
I need this functionality in order to avoid duplicating the logic of handling heartbeats in my own code.
I could do it, but there would be a waste of timers going around.
I have a doubt about the heartbeat function.
I did change it so that a handler can call say session.Send or even session.SetHeartbeatHandler(nil) anything else even if that requires locking. If i call it inside the mutex, that won't be possible.
The most obvious "drawback" of this, is that if the timer is "too fast" (like in the order of a few nanoseconds, which shouldn't happen in principle) the handler may be called concurrently, or if the handler itself does something like session.SetHeartbeatHandler(newHandler) an old handler could be called, because it is called outside the mutex. So, some care should be taken regarding that.
I can also add tests, but want to know first what you think of it.
What do you think of this?
This change is