1
0
mirror of https://github.com/mariadb-corporation/mariadb-connector-c.git synced 2025-08-08 14:02:17 +03:00

Fix crash (introduced by CLIENT_REMEMBER_OPTIONS leak fix)

see also http://lists.askmonty.org/pipermail/commits/2016-August/009643.html
This commit is contained in:
Georg Richter
2016-08-19 08:24:47 +02:00
parent 9207626bb4
commit c374386bce
2 changed files with 24 additions and 23 deletions

View File

@@ -353,7 +353,7 @@ MK_ASYNC_START_BODY(
parms.db= db; parms.db= db;
parms.port= port; parms.port= port;
parms.unix_socket= unix_socket; parms.unix_socket= unix_socket;
parms.client_flags= client_flags; parms.client_flags= client_flags | CLIENT_REMEMBER_OPTIONS;
}, },
NULL, NULL,
r_ptr, r_ptr,
@@ -387,34 +387,34 @@ MK_ASYNC_INTERNAL_BODY(
int STDCALL int STDCALL
mysql_real_query_start(int *ret, MYSQL *mysql, const char *stmt_str, size_t length) mysql_real_query_start(int *ret, MYSQL *mysql, const char *stmt_str, size_t length)
{ {
int res; int res;
struct mysql_async_context *b; struct mysql_async_context *b;
struct mysql_real_query_params parms; struct mysql_real_query_params parms;
b= mysql->options.extension->async_context; b= mysql->options.extension->async_context;
{ {
WIN_SET_NONBLOCKING(mysql) WIN_SET_NONBLOCKING(mysql)
parms.mysql= mysql; parms.mysql= mysql;
parms.stmt_str= stmt_str; parms.stmt_str= stmt_str;
parms.length= length; parms.length= length;
} }
b->active= 1; b->active= 1;
res= my_context_spawn(&b->async_context, mysql_real_query_start_internal, &parms); res= my_context_spawn(&b->async_context, mysql_real_query_start_internal, &parms);
b->active= b->suspended= 0; b->active= b->suspended= 0;
if (res > 0) if (res > 0)
{ {
/* Suspended. */ /* Suspended. */
b->suspended= 1; b->suspended= 1;
return b->events_to_wait_for; return b->events_to_wait_for;
} }
if (res < 0) if (res < 0)
{ {
set_mariadb_error((mysql), CR_OUT_OF_MEMORY, unknown_sqlstate); set_mariadb_error((mysql), CR_OUT_OF_MEMORY, unknown_sqlstate);
*ret= 1; *ret= 1;
} }
else else
*ret= b->ret_result.r_int; *ret= b->ret_result.r_int;
return 0; return 0;
} }

View File

@@ -1480,7 +1480,8 @@ error:
end_server(mysql); end_server(mysql);
/* only free the allocated memory, user needs to call mysql_close */ /* only free the allocated memory, user needs to call mysql_close */
mysql_close_memory(mysql); mysql_close_memory(mysql);
if (!(client_flag & CLIENT_REMEMBER_OPTIONS)) if (!(client_flag & CLIENT_REMEMBER_OPTIONS) &&
!mysql->options.extension->async_context)
mysql_close_options(mysql); mysql_close_options(mysql);
return(0); return(0);
} }