Skip to content

Commit ef87b19

Browse files
authored
Cursor.close() does not complete if it was already called (#1579)
See #1410 Signed-off-by: Thomas Segismont <[email protected]>
1 parent 021f84a commit ef87b19

File tree

3 files changed

+23
-0
lines changed

3 files changed

+23
-0
lines changed

vertx-mysql-client/src/test/java/io/vertx/tests/mysqlclient/tck/ProxySQLPreparedQueryTest.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,13 @@ public void testQueryCloseCursor(TestContext ctx) {
4545
super.testQueryCloseCursor(ctx);
4646
}
4747

48+
@Test
49+
@Ignore("Fetch command not supported by ProxySQL")
50+
@Override
51+
public void testQueryCloseCursorTwice(TestContext ctx) {
52+
super.testQueryCloseCursorTwice(ctx);
53+
}
54+
4855
@Test
4956
@Ignore("Fetch command not supported by ProxySQL")
5057
@Override

vertx-sql-client/src/main/java/io/vertx/sqlclient/impl/CursorImpl.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -98,6 +98,8 @@ private synchronized void close(Promise<Void> promise) {
9898
result = null;
9999
ps.closeCursor(id, promise);
100100
}
101+
} else {
102+
promise.complete();
101103
}
102104
}
103105
}

vertx-sql-client/src/test/java/io/vertx/tests/sqlclient/tck/PreparedQueryTestBase.java

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
package io.vertx.tests.sqlclient.tck;
1212

1313
import io.vertx.core.AsyncResult;
14+
import io.vertx.core.Future;
1415
import io.vertx.core.Handler;
1516
import io.vertx.core.Vertx;
1617
import io.vertx.ext.unit.Async;
@@ -305,6 +306,19 @@ public void testQueryCloseCursor(TestContext ctx) {
305306
});
306307
}
307308

309+
@Test
310+
public void testQueryCloseCursorTwice(TestContext ctx) {
311+
Async async = ctx.async();
312+
testCursor(ctx, conn -> {
313+
conn
314+
.prepare("SELECT * FROM immutable")
315+
.onComplete(ctx.asyncAssertSuccess(ps -> {
316+
Cursor cursor = ps.cursor(Tuple.tuple());
317+
Future.all(cursor.close(), cursor.close()).onComplete(ctx.asyncAssertSuccess(v -> async.complete()));
318+
}));
319+
});
320+
}
321+
308322
@Test
309323
public void testQueryStreamCloseCursor(TestContext ctx) {
310324
Async async = ctx.async();

0 commit comments

Comments
 (0)