Session reference counts are meant to count the number of external references to the session (i.e., references held outside of the protocol). If a protocol must keep track of session references internal to the protocol itself, a separate mechanism must be used.
This requirement is driven by upper protocols that require that when they release all of their references to a lower session, then the session's reference count goes to zero. Virtual protocols that manipulate lower session's upper protocol pointers are specific examples of these types of upper protocols.