Commit 367e7e87 authored by holyfoot/hf@mysql.com/hfmain.mysql.com's avatar holyfoot/hf@mysql.com/hfmain.mysql.com
Browse files

Bug #33796 Memory leak for prepared statements in embedded server.

Field data for a query was stored to the stmt->alloc that is emptied
with mysql_stmt_close statement only. That means a lot of memory can
be occupied without a reason if used doesn't call mysql_stmt_close often.
parent b89fabe1
Loading
Loading
Loading
Loading
+5 −8
Original line number Diff line number Diff line
@@ -4522,14 +4522,11 @@ my_bool STDCALL mysql_stmt_free_result(MYSQL_STMT *stmt)
  {
    MYSQL *mysql= stmt->mysql;

    if (result->data)
    {
    /* Result buffered */
    free_root(&result->alloc, MYF(MY_KEEP_PREALLOC));
    result->data= NULL;
    result->rows= 0;
    stmt->data_cursor= NULL;
    }

    if (mysql && stmt->field_count &&
        (int) stmt->state > (int) MYSQL_STMT_PREPARE_DONE)
+1 −1
Original line number Diff line number Diff line
@@ -668,7 +668,7 @@ bool Protocol::send_fields(List<Item> *list, uint flag)
    DBUG_RETURN(0);

  field_count= list->elements;
  field_alloc= thd->current_stmt ? &thd->current_stmt->mem_root :
  field_alloc= thd->current_stmt ? &thd->current_stmt->result.alloc :
                                   &mysql->field_alloc;
  if (!(client_field= mysql->fields= 
	(MYSQL_FIELD *)alloc_root(field_alloc,