Skip to content

Commit e8bed7f

Browse files
committed
Fix intermittent timeout in EventbusBridge testHookCreateSocketRejected
The TransportClient close handler can fire before the BridgeClient sets its closeHandler callback via onSuccess, causing the close event to be silently dropped. Track a pending close and replay it when the handler is set. Signed-off-by: Thomas Segismont <tsegismont@gmail.com>
1 parent b42ef05 commit e8bed7f

1 file changed

Lines changed: 14 additions & 0 deletions

File tree

vertx-web/src/test/java/io/vertx/ext/web/tests/handler/EventbusBridgeTest.java

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1399,6 +1399,7 @@ Future<TransportClient> connect(WebSocketClient client, String address) {
13991399
return client.connect("/eventbus/400/8ne8e94a/websocket").map(ws -> new TransportClient() {
14001400
private Handler<JsonObject> handler;
14011401
private Handler<Void> closeHandler;
1402+
private boolean closePending;
14021403

14031404
{
14041405
ws.handler(buff -> {
@@ -1422,6 +1423,8 @@ Future<TransportClient> connect(WebSocketClient client, String address) {
14221423
ws.closeHandler(v -> {
14231424
if (closeHandler != null) {
14241425
closeHandler.handle(v);
1426+
} else {
1427+
closePending = true;
14251428
}
14261429
});
14271430
}
@@ -1434,6 +1437,10 @@ public void handler(Handler<JsonObject> handler) {
14341437
@Override
14351438
public void closeHandler(Handler<Void> handler) {
14361439
this.closeHandler = handler;
1440+
if (closePending && handler != null) {
1441+
closePending = false;
1442+
handler.handle(null);
1443+
}
14371444
}
14381445

14391446
@Override
@@ -1464,6 +1471,7 @@ Future<TransportClient> connect(WebSocketClient client, String address) {
14641471
return client.connect(address).map(ws -> new TransportClient() {
14651472
private Handler<JsonObject> handler;
14661473
private Handler<Void> closeHandler;
1474+
private boolean closePending;
14671475

14681476
{
14691477
ws.handler(buff -> {
@@ -1477,6 +1485,8 @@ Future<TransportClient> connect(WebSocketClient client, String address) {
14771485
ws.closeHandler(v -> {
14781486
if (closeHandler != null) {
14791487
closeHandler.handle(v);
1488+
} else {
1489+
closePending = true;
14801490
}
14811491
});
14821492
}
@@ -1489,6 +1499,10 @@ public void handler(Handler<JsonObject> handler) {
14891499
@Override
14901500
public void closeHandler(Handler<Void> handler) {
14911501
this.closeHandler = handler;
1502+
if (closePending && handler != null) {
1503+
closePending = false;
1504+
handler.handle(null);
1505+
}
14921506
}
14931507

14941508
@Override

0 commit comments

Comments
 (0)