Skip to content

Commit 059494f

Browse files
authored
Merge pull request #230 from agent3bood/issues/227
[gql_websocket_link] Fix race condition when executing multiple request without await
2 parents 15643ff + bd2feea commit 059494f

File tree

7 files changed

+262
-232
lines changed

7 files changed

+262
-232
lines changed

docs/gql.svg

Lines changed: 219 additions & 225 deletions
Loading

links/gql_websocket_link/CHANGELOG.md

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,11 @@
1+
## 0.3.1
2+
3+
- Close [227](https://github.com/gql-dart/gql/issues/227).
4+
5+
## 0.3.0
6+
7+
- Migrate to null safety
8+
19
## 0.3.0-nullsafety.1
210

311
- Migrate to null safety
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
/// GQL WebSocket link
22
library gql_websocket_link;
33

4-
export "package:gql_websocket_link/src/link.dart";
54
export "package:gql_websocket_link/src/exceptions.dart";
5+
export "package:gql_websocket_link/src/link.dart";
66
export "package:gql_websocket_link/src/messages.dart";

links/gql_websocket_link/lib/src/exceptions.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import "package:gql_exec/gql_exec.dart";
22
import "package:gql_link/gql_link.dart";
3-
import "package:meta/meta.dart";
43
import "package:gql_websocket_link/gql_websocket_link.dart";
4+
import "package:meta/meta.dart";
55

66
/// Exception occurring when response parsing fails
77
@immutable

links/gql_websocket_link/lib/src/link.dart

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,14 @@
11
import "dart:async";
22
import "dart:convert";
33

4-
import "package:gql_websocket_link/gql_websocket_link.dart";
54
import "package:gql_exec/gql_exec.dart";
65
import "package:gql_link/gql_link.dart";
6+
import "package:gql_websocket_link/gql_websocket_link.dart";
77
import "package:meta/meta.dart";
88
import "package:rxdart/rxdart.dart";
99
import "package:uuid/uuid.dart";
10-
import "package:web_socket_channel/web_socket_channel.dart";
1110
import "package:web_socket_channel/status.dart" as websocket_status;
11+
import "package:web_socket_channel/web_socket_channel.dart";
1212

1313
final uuid = Uuid();
1414

@@ -133,7 +133,7 @@ class WebSocketLink extends Link {
133133
);
134134
_requests.add(requestWithContext);
135135

136-
if (_channel == null || _connectionStateController.value == closed) {
136+
if (_connectionStateController.value == closed) {
137137
await _connect();
138138
}
139139
final StreamController<Response> response = StreamController();

links/gql_websocket_link/pubspec.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
name: gql_websocket_link
2-
version: 0.3.0
2+
version: 0.3.1
33
description: GQL Websocket Link
44
repository: https://github.com/gql-dart/gql
55
environment:

links/gql_websocket_link/test/gql_websocket_link_test.dart

Lines changed: 29 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,8 @@ import "dart:io";
55
import "package:gql/language.dart";
66
import "package:gql_exec/gql_exec.dart";
77
import "package:gql_websocket_link/gql_websocket_link.dart";
8-
import "package:web_socket_channel/io.dart";
98
import "package:test/test.dart";
9+
import "package:web_socket_channel/io.dart";
1010
import "package:web_socket_channel/status.dart" as websocket_status;
1111

1212
void main() {
@@ -1057,6 +1057,34 @@ void main() {
10571057
);
10581058
link.request(request).listen(print, onError: print);
10591059
});
1060+
1061+
test(
1062+
"_connect() must be called only once when executing multiple requests without awaiting",
1063+
() async {
1064+
WebSocketLink link;
1065+
Request request;
1066+
1067+
request = Request(
1068+
operation: Operation(
1069+
operationName: "sub",
1070+
document: parseString("subscription MySubscription {}"),
1071+
),
1072+
);
1073+
1074+
link = WebSocketLink(
1075+
null,
1076+
channelGenerator: expectAsync0(
1077+
() async => IOWebSocketChannel.connect("ws://localhost"),
1078+
count: 1,
1079+
max: 1,
1080+
),
1081+
);
1082+
1083+
link.request(request).listen((event) {});
1084+
link.request(request).listen((event) {});
1085+
link.request(request).listen((event) {});
1086+
link.request(request).listen((event) {});
1087+
});
10601088
},
10611089
);
10621090
}

0 commit comments

Comments
 (0)