release method
holder is done with serverId. The connection closes only when the
last holder lets go.
Implementation
Future<void> release(String serverId, String holder) async {
final holders = _holders[serverId];
holders?.remove(holder);
if (holders != null && holders.isNotEmpty) {
_logger.debug('Released — still held', {
'serverId': serverId,
'holder': holder,
'holders': holders.length,
});
return;
}
_holders.remove(serverId);
await disconnect(serverId);
}