From c374386bcec022c463fafb1bc4b7d7120061fa56 Mon Sep 17 00:00:00 2001 From: Georg Richter Date: Fri, 19 Aug 2016 08:24:47 +0200 Subject: [PATCH] Fix crash (introduced by CLIENT_REMEMBER_OPTIONS leak fix) see also http://lists.askmonty.org/pipermail/commits/2016-August/009643.html --- libmariadb/mariadb_async.c | 44 +++++++++++++++++++------------------- libmariadb/mariadb_lib.c | 3 ++- 2 files changed, 24 insertions(+), 23 deletions(-) diff --git a/libmariadb/mariadb_async.c b/libmariadb/mariadb_async.c index b1a8e5df..5ba0c3c5 100644 --- a/libmariadb/mariadb_async.c +++ b/libmariadb/mariadb_async.c @@ -353,7 +353,7 @@ MK_ASYNC_START_BODY( parms.db= db; parms.port= port; parms.unix_socket= unix_socket; - parms.client_flags= client_flags; + parms.client_flags= client_flags | CLIENT_REMEMBER_OPTIONS; }, NULL, r_ptr, @@ -387,34 +387,34 @@ MK_ASYNC_INTERNAL_BODY( int STDCALL mysql_real_query_start(int *ret, MYSQL *mysql, const char *stmt_str, size_t length) { - int res; - struct mysql_async_context *b; - struct mysql_real_query_params parms; - - b= mysql->options.extension->async_context; + int res; + struct mysql_async_context *b; + struct mysql_real_query_params parms; + + b= mysql->options.extension->async_context; { WIN_SET_NONBLOCKING(mysql) parms.mysql= mysql; parms.stmt_str= stmt_str; parms.length= length; } - - b->active= 1; + + b->active= 1; res= my_context_spawn(&b->async_context, mysql_real_query_start_internal, &parms); - b->active= b->suspended= 0; - if (res > 0) - { - /* Suspended. */ - b->suspended= 1; - return b->events_to_wait_for; - } - if (res < 0) - { - set_mariadb_error((mysql), CR_OUT_OF_MEMORY, unknown_sqlstate); - *ret= 1; - } - else - *ret= b->ret_result.r_int; + b->active= b->suspended= 0; + if (res > 0) + { + /* Suspended. */ + b->suspended= 1; + return b->events_to_wait_for; + } + if (res < 0) + { + set_mariadb_error((mysql), CR_OUT_OF_MEMORY, unknown_sqlstate); + *ret= 1; + } + else + *ret= b->ret_result.r_int; return 0; } diff --git a/libmariadb/mariadb_lib.c b/libmariadb/mariadb_lib.c index ac18aa4c..aa5e11cd 100644 --- a/libmariadb/mariadb_lib.c +++ b/libmariadb/mariadb_lib.c @@ -1480,7 +1480,8 @@ error: end_server(mysql); /* only free the allocated memory, user needs to call mysql_close */ 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); return(0); }