Skip to content

Commit 281e4bf

Browse files
PS-9537 fix: Existing connection cannot be reused to run multiple queries in Command Services
https://perconadev.atlassian.net/browse/PS-9537 Fixed problem with re-using the same connection created via 'mysql_command_factory->init()' / 'mysql_command_factory->connect()' in multiple calls to' mysql_command_query->query()'. The problem seems to be a regression introduced by upstream in their fix for Bug #34323788 "ASAN memory leaks reported by test_mysql_command_services_component.test" (commit mysql/mysql-server@5dc1a14). Inside 'csi_advanced_command()' 'mcs_extn->consumer_srv_data' when is not nullptr cannot be simply re-used as its `mcs_extn->data` member has already been set to nullptr by `std::exchange()` inside `csi_read_rows()`. Fixed by calling 'factory_srv->end()' and 'factory_srv->start()' in this case.
1 parent 1e12635 commit 281e4bf

File tree

1 file changed

+7
-4
lines changed

1 file changed

+7
-4
lines changed

sql/server_component/mysql_command_backend.cc

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -306,10 +306,13 @@ bool csi_advanced_command(MYSQL *mysql, enum enum_server_command command,
306306
}
307307

308308
mysql_handle.mysql = mysql;
309-
if (mcs_extn->consumer_srv_data != nullptr)
310-
srv_ctx_h = reinterpret_cast<SRV_CTX_H>(mcs_extn->consumer_srv_data);
311-
else if (((class mysql_command_consumer_refs *)(command_consumer_srv))
312-
->factory_srv->start(&srv_ctx_h, (MYSQL_H *)&mysql_handle)) {
309+
if (mcs_extn->consumer_srv_data != nullptr) {
310+
((class mysql_command_consumer_refs *)(command_consumer_srv))
311+
->factory_srv->end(
312+
reinterpret_cast<SRV_CTX_H>(mcs_extn->consumer_srv_data));
313+
}
314+
if (((class mysql_command_consumer_refs *)(command_consumer_srv))
315+
->factory_srv->start(&srv_ctx_h, (MYSQL_H *)&mysql_handle)) {
313316
sprintf(*err_msg, "Could not create %s service",
314317
"mysql_text_consumer_factory_v1");
315318
goto error;

0 commit comments

Comments
 (0)