[MDEV-4161] Assertion `status_var.memory_used == 0' fails in virtual THD::~THD() Created: 2013-02-10  Updated: 2013-04-05  Resolved: 2013-04-05

Status: Closed
Project: MariaDB Server
Component/s: None
Affects Version/s: 10.0.1
Fix Version/s: 10.0.2, 5.5.31

Type: Bug Priority: Major
Reporter: Elena Stepanova Assignee: Sergei Golubchik
Resolution: Fixed Votes: 0
Labels: None

Issue Links:
Relates

 Description   

mysqld: 10.0/sql/sql_class.cc:1572: virtual THD::~THD(): Assertion `status_var.memory_used == 0' failed.
[ERROR] mysqld got signal 6 ;

#5  0x00007f2143c34b8b in __GI_abort () at abort.c:91
#6  0x00007f2143c2a0ee in __assert_fail_base (fmt=<optimized out>, assertion=0xd90a88 "status_var.memory_used == 0", file=0xd907c8 "10.0/sql/sql_class.cc", line=<optimized out>, function=<optimized out>) at assert.c:94
#7  0x00007f2143c2a192 in __GI___assert_fail (assertion=0xd90a88 "status_var.memory_used == 0", file=0xd907c8 "10.0/sql/sql_class.cc", line=1572, function=0xd92790 "virtual THD::~THD()") at assert.c:103
#8  0x00000000005d9502 in THD::~THD (this=0x48e3f90, __in_chrg=<optimized out>) at 10.0/sql/sql_class.cc:1572
#9  0x00000000005d9664 in THD::~THD (this=0x48e3f90, __in_chrg=<optimized out>) at 10.0/sql/sql_class.cc:1577
#10 0x0000000000562120 in unlink_thd (thd=0x48e3f90) at 10.0/sql/mysqld.cc:2599
#11 0x0000000000562412 in one_thread_per_connection_end (thd=0x48e3f90, put_in_cache=true) at 10.0/sql/mysqld.cc:2701
#12 0x000000000071f46d in do_handle_one_connection (thd_arg=0x48e3f90) at 10.0/sql/sql_connect.cc:1278
#13 0x000000000071ed97 in handle_one_connection (arg=0x48e3f90) at 10.0/sql/sql_connect.cc:1181
#14 0x00007f21449fae9a in start_thread (arg=0x7f2144f45700) at pthread_create.c:308

revision-id: sanja@askmonty.org-20130204153039-ws7tcwfmbi6vil6e
revno: 3501
branch-nick: 10.0

Perl test (adjust port and duration as needed, default values are 3306 and 300 seconds):

use DBI;
use Time::HiRes;
use Getopt::Long;
use strict;
 
my $port=3306;
my $duration=300;
 
GetOptions (
   "port=i" => \$port,
   "duration=i" => \$duration
);
 
my $dsn="DBI:mysql:test;host=127.0.0.1;port=$port";
my $victim;
my $test_end = time() + $duration;
 
my $dbh = DBI->connect($dsn,'root','') || die "Could not connect: $DBI::errstr";
$dbh->do('DROP TABLE IF EXISTS A');
$dbh->do('CREATE TABLE A (col_int_nokey INT, col_int_key INT, KEY (col_int_key)) ENGINE=InnoDB');
 
foreach (1..10)
{
   my $pid = fork();
   unless ( defined $pid ) {
      die "Could not fork: $!\n";
   }
   if ( $pid == 0 ) {
      run_worker();
      exit;
   }
}
 
while ($dbh->ping && ( time() <= $test_end+1 )) 
{
   $victim = $dbh->selectcol_arrayref("SELECT `id` FROM INFORMATION_SCHEMA.PROCESSLIST WHERE id > CONNECTION_ID() ORDER BY RAND() LIMIT 1");
   if ( ! $DBI::err && $victim && @$victim ) {
      $dbh->do("KILL ". $victim->[0]);
      Time::HiRes::sleep (0.1);
   }
}
print "All good\n" unless $DBI::errstr;
 
sub run_worker 
{
   my $dbh;
  WORK:
   while ( $dbh = DBI->connect($dsn,'root','',{ PrintError=>0 }) ) 
   {
      while ( $dbh->do('SELECT * FROM A WHERE col_int_key < ' . int(rand(100))) ) { last WORK if time() >= $test_end } ;
   }
   $dbh->disconnect() if $dbh;
}
 



 Comments   
Comment by Sergei Golubchik [ 2013-04-05 ]

pushed in 5.5

Generated at Thu Feb 08 06:54:15 UTC 2024 using Jira 8.20.16#820016-sha1:9d11dbea5f4be3d4cc21f03a88dd11d8c8687422.