During the upgrade from AWS Go SDK v1 to v2, the internal heartbeat implementation did not use enforce any kind of network timeout. Under specific circumstances, SessionMonitor would lock waiting for the Heartbeat to fail, and the lock would be released before the SessionMonitor callback would be called.
This releases fixes the problem by ensure automatic heartbeat's network calls never outlive their established duration, therefore release the internal mutexes to let the SessionMonitor callback to be triggered.
The original semantics in which expired locks won't trigger SessionMonitors remain the same (as in their original Java counterparts).