You've already forked mariadb-connector-c
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:
@@ -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;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@@ -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);
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user