Browse Source

Don't wait ready before releasing semaphore

pull/1761/head
Paulo 4 years ago
parent
commit
dba29e9f35
1 changed files with 16 additions and 27 deletions
  1. +16
    -27
      src/Discord.Net.WebSocket/DiscordSocketClient.cs

+ 16
- 27
src/Discord.Net.WebSocket/DiscordSocketClient.cs View File

@@ -245,15 +245,15 @@ namespace Discord.WebSocket
await _gatewayLogger.DebugAsync("Identifying").ConfigureAwait(false); await _gatewayLogger.DebugAsync("Identifying").ConfigureAwait(false);
await ApiClient.SendIdentifyAsync(shardID: ShardId, totalShards: TotalShards, guildSubscriptions: _guildSubscriptions, gatewayIntents: _gatewayIntents, presence: BuildCurrentStatus()).ConfigureAwait(false); await ApiClient.SendIdentifyAsync(shardID: ShardId, totalShards: TotalShards, guildSubscriptions: _guildSubscriptions, gatewayIntents: _gatewayIntents, presence: BuildCurrentStatus()).ConfigureAwait(false);
} }

//Wait for READY
await _connection.WaitAsync().ConfigureAwait(false);
} }
finally finally
{ {
if (locked) if (locked)
_shardedClient.ReleaseIdentifyLock(); _shardedClient.ReleaseIdentifyLock();
} }

//Wait for READY
await _connection.WaitAsync().ConfigureAwait(false);
} }
private async Task OnDisconnectingAsync(Exception ex) private async Task OnDisconnectingAsync(Exception ex)
{ {
@@ -554,36 +554,25 @@ namespace Discord.WebSocket
case GatewayOpCode.InvalidSession: case GatewayOpCode.InvalidSession:
{ {
await _gatewayLogger.DebugAsync("Received InvalidSession").ConfigureAwait(false); await _gatewayLogger.DebugAsync("Received InvalidSession").ConfigureAwait(false);
await _gatewayLogger.WarningAsync("Failed to resume previous session").ConfigureAwait(false);


if (_sessionId != null)
{
// Failed to resume
await _gatewayLogger.WarningAsync("Failed to resume previous session").ConfigureAwait(false);
_sessionId = null;
_lastSeq = 0;


_sessionId = null;
_lastSeq = 0;
if (_shardedClient != null)
if (_shardedClient != null)
{
await _shardedClient.AcquireIdentifyLockAsync(ShardId, _connection.CancelToken).ConfigureAwait(false);
try
{ {
await _shardedClient.AcquireIdentifyLockAsync(ShardId, _connection.CancelToken).ConfigureAwait(false);
try
{
await ApiClient.SendIdentifyAsync(shardID: ShardId, totalShards: TotalShards, guildSubscriptions: _guildSubscriptions, gatewayIntents: _gatewayIntents, presence: BuildCurrentStatus()).ConfigureAwait(false);
}
finally
{
_shardedClient.ReleaseIdentifyLock();
}
}
else
await ApiClient.SendIdentifyAsync(shardID: ShardId, totalShards: TotalShards, guildSubscriptions: _guildSubscriptions, gatewayIntents: _gatewayIntents, presence: BuildCurrentStatus()).ConfigureAwait(false); await ApiClient.SendIdentifyAsync(shardID: ShardId, totalShards: TotalShards, guildSubscriptions: _guildSubscriptions, gatewayIntents: _gatewayIntents, presence: BuildCurrentStatus()).ConfigureAwait(false);
}
finally
{
_shardedClient.ReleaseIdentifyLock();
}
} }
else else
{
// Failed to identify
await _gatewayLogger.WarningAsync("Failed to identify").ConfigureAwait(false);
await ApiClient.SendIdentifyAsync(shardID: ShardId, totalShards: TotalShards, guildSubscriptions: _guildSubscriptions, gatewayIntents: _gatewayIntents, presence: BuildCurrentStatus()).ConfigureAwait(false); await ApiClient.SendIdentifyAsync(shardID: ShardId, totalShards: TotalShards, guildSubscriptions: _guildSubscriptions, gatewayIntents: _gatewayIntents, presence: BuildCurrentStatus()).ConfigureAwait(false);
}
} }
break; break;
case GatewayOpCode.Reconnect: case GatewayOpCode.Reconnect:
@@ -643,7 +632,7 @@ namespace Discord.WebSocket
} }
else if (_connection.CancelToken.IsCancellationRequested) else if (_connection.CancelToken.IsCancellationRequested)
return; return;
if (BaseConfig.AlwaysDownloadUsers) if (BaseConfig.AlwaysDownloadUsers)
_ = DownloadUsersAsync(Guilds.Where(x => x.IsAvailable && !x.HasAllMembers)); _ = DownloadUsersAsync(Guilds.Where(x => x.IsAvailable && !x.HasAllMembers));




Loading…
Cancel
Save