Skip to content

Commit aad5721

Browse files
committed
Remove lock from WebSocketWrapper
1 parent bcd83ef commit aad5721

File tree

1 file changed

+35
-43
lines changed

1 file changed

+35
-43
lines changed

libsignal-service-dotnet/websocket/WebSocketWrapper.cs

Lines changed: 35 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,6 @@ internal class WebSocketWrapper
2020
private const int ReceiveChunkSize = 1024;
2121
private volatile ClientWebSocket WebSocket;
2222
private readonly Uri _uri;
23-
private readonly object ReconnectLock = new object();
2423
private Action OnConnectedAction;
2524
private Action<byte[]> OnMessageAction;
2625

@@ -59,53 +58,52 @@ public async Task HandleOutgoingWS(CancellationToken token)
5958
{
6059
Logger.LogWarning("HandleOutgoingWS send failed ({0})", e.Message);
6160
Logger.LogInformation("HandleOutgoingWS reconnecting");
62-
Reconnect(token);
61+
await Reconnect(token);
6362
}
6463
}
6564
}
6665
//TODO dispose
6766
Logger.LogTrace("HandleOutgoingWS task finished");
6867
}
6968

70-
public void Reconnect(CancellationToken token)
69+
public async Task Reconnect(CancellationToken token)
7170
{
72-
lock (ReconnectLock)
71+
if (WebSocket.State == WebSocketState.Open)
7372
{
74-
if (WebSocket.State == WebSocketState.Open)
75-
return;
73+
return;
74+
}
7675

77-
var tries = 0;
76+
var tries = 0;
77+
try
78+
{
79+
await WebSocket.CloseOutputAsync(WebSocketCloseStatus.NormalClosure, "goodbye", token);
80+
}
81+
catch (Exception)
82+
{
83+
Logger.LogTrace("could not close old websocket gracefully");
84+
}
85+
while (true)
86+
{
7887
try
7988
{
80-
WebSocket.CloseOutputAsync(WebSocketCloseStatus.NormalClosure, "goodbye", token).Wait();
81-
}
82-
catch (Exception)
83-
{
84-
Logger.LogTrace("could not close old websocket gracefully");
89+
if (token.IsCancellationRequested)
90+
return;
91+
tries++;
92+
CreateSocket();
93+
await WebSocket.ConnectAsync(_uri, token);
94+
break;
8595
}
86-
while (true)
96+
catch (Exception e)
8797
{
88-
try
89-
{
90-
if (token.IsCancellationRequested)
91-
return;
92-
tries++;
93-
CreateSocket();
94-
WebSocket.ConnectAsync(_uri, token).Wait();
95-
break;
96-
}
97-
catch (Exception e)
98-
{
99-
var delay_length = 15;
100-
if (tries > 20)
101-
delay_length = 60 * 5;
102-
else if (tries > 10)
103-
delay_length = 60;
104-
else if (tries > 5)
105-
delay_length = 30;
106-
Logger.LogWarning("Failed to reconnect ({0}). Retrying in {1} seconds", e.Message, delay_length);
107-
Task.Delay(1000 * delay_length, token).Wait();
108-
}
98+
var delay_length = 15;
99+
if (tries > 20)
100+
delay_length = 60 * 5;
101+
else if (tries > 10)
102+
delay_length = 60;
103+
else if (tries > 5)
104+
delay_length = 30;
105+
Logger.LogWarning("Failed to reconnect ({0}). Retrying in {1} seconds", e.Message, delay_length);
106+
await Task.Delay(1000 * delay_length, token);
109107
}
110108
}
111109
Logger.LogInformation("Successfully reconnected to the server");
@@ -146,7 +144,7 @@ public async Task HandleIncomingWS(CancellationToken token)
146144
{
147145
Logger.LogWarning("HandleIncomingWS recv failed ({0})", e.Message);
148146
Logger.LogInformation("HandleIncomingWS reconnecting");
149-
Reconnect(token);
147+
await Reconnect(token);
150148
}
151149
}
152150
}
@@ -180,14 +178,8 @@ public async Task Connect(CancellationToken token)
180178
Logger.LogTrace("Connect()");
181179
try
182180
{
183-
await Task.Run(() =>
184-
{
185-
lock (ReconnectLock) //TODO async lock
186-
{
187-
WebSocket.ConnectAsync(_uri, token).Wait();
188-
CallOnConnected();
189-
}
190-
});
181+
await WebSocket.ConnectAsync(_uri, token);
182+
CallOnConnected();
191183
}
192184
catch (Exception e)
193185
{

0 commit comments

Comments
 (0)