Stream Management is a feature that allows a session to be 'resumed'. The implementation basically keeps a reference to a session alive for a certain period of time when its connection got disconnected in a non-clean way (eg: network interruption). When a new session for the same user is established, that session can indicate that it wants to be 'resume' the old session. What happens is that the new session "donates" its connection to the old session, which is then is resumed.
The session that donates its connection is no longer relevant. The existing code marks it as 'detached', which, eventually, causes it to be cleaned up. This, however, is confusing (and potientially wrong): the session lingers in a state of being 'detached', which implies that it can be resumed. That simply is not the case. The session is cleanup up only after the detach timeout has occurred.
Openfire should clean up the donor immediately after session resumption.