Updated mariadb_lib.c.patch

pull/4407/head
Rahim Kanji 2 years ago
parent e9b3956b6a
commit 7e202c92ee

2
deps/Makefile vendored

@ -238,7 +238,7 @@ else ifeq ($(USEVALGRIND),1)
cd mariadb-client-library/mariadb_client && patch -p0 < ../ma_context.h.patch
endif
cd mariadb-client-library/mariadb_client && patch -p0 < ../mariadb_stmt.c.patch
cd mariadb-client-library/mariadb_client && patch libmariadb/mariadb_lib.c < ../mariadb_lib.c.patch
cd mariadb-client-library/mariadb_client && patch -p0 < ../mariadb_lib.c.patch
cd mariadb-client-library/mariadb_client && patch libmariadb/mariadb_lib.c < ../mariadb_lib.c.collation.patch # make sure this path is applied after mariadb_lib.c.patch
cd mariadb-client-library/mariadb_client && patch libmariadb/mariadb_lib.c < ../mariadb_lib.c.ipv6_fix.patch # make sure this patch is applied after mariadb_lib.c.collation.patch
# cd mariadb-client-library/mariadb_client && patch libmariadb/net.c < ../net.c.patch

@ -1,41 +1,45 @@
diff --git libmariadb/mariadb_lib.c libmariadb/mariadb_lib.c
index 8c2a99b..cf6114a 100644
index e8db51a0..66b44df4 100644
--- libmariadb/mariadb_lib.c
+++ libmariadb/mariadb_lib.c
@@ -1643,9 +1643,16 @@ MYSQL *mthd_my_real_connect(MYSQL *mysql, const char *host, const char *user,
@@ -1936,10 +1936,16 @@ restart:
mysql->client_flag= client_flag;
+ {
+ volatile my_bool net_blocking = ma_pvio_is_blocking(net->pvio);
+ if (!net_blocking)
+ ma_pvio_blocking(net->pvio, TRUE, 0);
if (run_plugin_auth(mysql, scramble_data, scramble_len,
scramble_plugin, db))
goto error;
+ if (!net_blocking)
+ ma_pvio_blocking(net->pvio, FALSE, 0);
+ }
if (mysql->client_flag & CLIENT_COMPRESS)
net->compress= 1;
@@ -1696,6 +1703,15 @@ MYSQL *mthd_my_real_connect(MYSQL *mysql, const char *host, const char *user,
- if (run_plugin_auth(mysql, scramble_data, scramble_len,
- scramble_plugin, db))
- goto error;
-
+ {
+ volatile my_bool net_blocking = ma_pvio_is_blocking(net->pvio);
+ if (!net_blocking)
+ ma_pvio_blocking(net->pvio, TRUE, 0);
+ if (run_plugin_auth(mysql, scramble_data, scramble_len,
+ scramble_plugin, db))
+ goto error;
+ if (!net_blocking)
+ ma_pvio_blocking(net->pvio, FALSE, 0);
+ }
if (mysql->client_flag & CLIENT_COMPRESS ||
mysql->client_flag & CLIENT_ZSTD_COMPRESSION)
{
@@ -2006,6 +2012,15 @@ restart:
return(mysql);
error:
+ // fix for proxysql bug #2623
+ if (mysql->net.extension) {
+ free(mysql->net.extension);
+ mysql->net.extension=NULL;
+ free(mysql->net.extension);
+ mysql->net.extension=NULL;
+ }
+ if (mysql->extension) {
+ free(mysql->extension);
+ mysql->extension=NULL;
+ free(mysql->extension);
+ mysql->extension=NULL;
+ }
/* Free alloced memory */
end_server(mysql);
/* only free the allocated memory, user needs to call mysql_close */
@@ -1775,7 +1791,7 @@ my_bool STDCALL mariadb_reconnect(MYSQL *mysql)
/* Free allocated memory */
free(host_list);
free(host_copy);
@@ -2087,7 +2102,7 @@ my_bool STDCALL mariadb_reconnect(MYSQL *mysql)
if (!mysql_real_connect(&tmp_mysql,mysql->host,mysql->user,mysql->passwd,
mysql->db, mysql->port, mysql->unix_socket,
mysql->client_flag | CLIENT_REMEMBER_OPTIONS) ||
@ -44,23 +48,23 @@ index 8c2a99b..cf6114a 100644
{
if (ctxt)
my_context_install_suspend_resume_hook(ctxt, NULL, NULL);
@@ -1821,6 +1837,7 @@ void ma_invalidate_stmts(MYSQL *mysql, const char *function_name)
@@ -2138,6 +2153,7 @@ void ma_invalidate_stmts(MYSQL *mysql, const char *function_name)
{
if (mysql->stmts)
{
+/*
+ /*
LIST *li_stmt= mysql->stmts;
for (; li_stmt; li_stmt= li_stmt->next)
@@ -1829,6 +1846,7 @@ void ma_invalidate_stmts(MYSQL *mysql, const char *function_name)
@@ -2146,6 +2162,7 @@ void ma_invalidate_stmts(MYSQL *mysql, const char *function_name)
stmt->mysql= NULL;
SET_CLIENT_STMT_ERROR(stmt, CR_STMT_CLOSED, SQLSTATE_UNKNOWN, function_name);
stmt_set_error(stmt, CR_STMT_CLOSED, SQLSTATE_UNKNOWN, 0, function_name);
}
+*/
+ */
mysql->stmts= NULL;
}
}
@@ -2115,6 +2133,44 @@ mysql_close(MYSQL *mysql)
@@ -2458,6 +2475,42 @@ mysql_close(MYSQL *mysql)
return;
}
@ -69,28 +73,27 @@ index 8c2a99b..cf6114a 100644
+{
+ if (mysql) /* Some simple safety */
+ {
+
+ if (mysql->methods) {
+ if (mysql->net.pvio) {
+ free_old_query(mysql);
+ mysql->status=MYSQL_STATUS_READY; /* Force command */
+ mysql->options.reconnect=0;
+ end_server(mysql);
+ }
+ }
+ if (mysql->net.pvio) {
+ free_old_query(mysql);
+ mysql->status=MYSQL_STATUS_READY; /* Force command */
+ mysql->options.reconnect=0;
+ end_server(mysql);
+ }
+ }
+ mysql_close_memory(mysql);
+ mysql_close_options(mysql);
+ mysql->host_info=mysql->user=mysql->passwd=mysql->db=0;
+
+ // fix for proxysql bug #3204
+ if (mysql->net.extension) {
+ free(mysql->net.extension);
+ mysql->net.extension=NULL;
+ free(mysql->net.extension);
+ mysql->net.extension=NULL;
+ }
+
+ if (mysql->extension) {
+ free(mysql->extension);
+ mysql->extension=NULL;
+ free(mysql->extension);
+ mysql->extension=NULL;
+ }
+
+ /* Clear pointers for better safety */
@ -101,20 +104,10 @@ index 8c2a99b..cf6114a 100644
+ }
+ return;
+}
+
/**************************************************************************
** Do a query. If query returned rows, free old rows.
@@ -2189,6 +2245,8 @@ int ma_read_ok_packet(MYSQL *mysql, uchar *pos, ulong length)
char *data;
si_type= (enum enum_session_state_type)net_field_length(&pos);
switch(si_type) {
+ case SESSION_TRACK_GTIDS:
+ net_field_length(&pos); /* skip encoding */
case SESSION_TRACK_SCHEMA:
case SESSION_TRACK_STATE_CHANGE:
case SESSION_TRACK_TRANSACTION_CHARACTERISTICS:
@@ -3670,18 +3728,27 @@ void STDCALL mysql_get_character_set_info(MYSQL *mysql, MY_CHARSET_INFO *cs)
@@ -4237,18 +4290,27 @@ void STDCALL mysql_get_character_set_info(MYSQL *mysql, MY_CHARSET_INFO *cs)
mariadb_get_charset_info(mysql, cs);
}
@ -147,11 +140,15 @@ index 8c2a99b..cf6114a 100644
if (!mysql_real_query(mysql, buff, (unsigned long)strlen(buff)))
{
mysql->charset= cs;
@@ -3691,6 +3758,7 @@ int STDCALL mysql_set_character_set(MYSQL *mysql, const char *csname)
@@ -4258,8 +4320,9 @@ int STDCALL mysql_set_character_set(MYSQL *mysql, const char *csname)
}
error:
- my_set_error(mysql, CR_CANT_READ_CHARSET, SQLSTATE_UNKNOWN,
- 0, csname, "compiled_in");
+ if (!cs)
my_set_error(mysql, CR_CANT_READ_CHARSET, SQLSTATE_UNKNOWN,
0, csname, "compiled_in");
+ my_set_error(mysql, CR_CANT_READ_CHARSET, SQLSTATE_UNKNOWN,
+ 0, csname, "compiled_in");
return(mysql->net.last_errno);
}

Loading…
Cancel
Save