Commit b204dc43 authored by Georgi Kodinov's avatar Georgi Kodinov
Browse files

Bug #38693: leaked memory with blobs!

If delayed insert fails to upgrade the lock it was not
freeing the temporary memory storage used to keep
newly constructed blob values in memory.
Fixed by iterating over the remaining rows in the delayed
insert rowset and freeing the blob storage for each row.

No test suite because it involves concurrent delayed inserts 
on a table and cannot easily be made deterministic. 

Added a correct valgrind suppression for Fedora 9.
parent d4c75b7d
Loading
Loading
Loading
Loading
+8 −0
Original line number Diff line number Diff line
@@ -319,6 +319,14 @@
   fun:_dl_map_object
}

{
   libc pthread_exit 8
   Memcheck:Leak
   fun:malloc
   fun:local_strdup
   fun:_dl_map_object
   fun:dl_open_worker
}


#
+5 −0
Original line number Diff line number Diff line
@@ -2585,6 +2585,11 @@ bool Delayed_insert::handle_inserts(void)
  /* Remove all not used rows */
  while ((row=rows.get()))
  {
    if (table->s->blob_fields)
    {
      memcpy(table->record[0],row->record,table->s->reclength);
      free_delayed_insert_blobs(table);
    }
    delete row;
    thread_safe_increment(delayed_insert_errors,&LOCK_delayed_status);
    stacked_inserts--;