There is a potential leak when using the version of link with RemoteConnection::RECONNECT. This was originally implemented to refresh links during master recovery.
The leak occurs here:
^ The comment here is not correct, as that is not the last reference to the existing socket.
At this point, the existing socket may be a perfectly valid link. Valid links will all have a reference inside a callback loop created here:
We need to stop the callback loop but prevent any resulting ExitedEvents from being sent due to stopping the callback loop. This means discarding the callback loop's future after we have called swap_implementing_socket.