| Bug #27718 | Falcon: crash if two connections doing inserts and selects | ||
|---|---|---|---|
| Submitted: | 9 Apr 2007 18:27 | Modified: | 14 Jun 2007 15:23 |
| Reporter: | Peter Gulutzan | Email Updates: | |
| Status: | Can't repeat | Impact on me: | |
| Category: | MySQL Server: Falcon storage engine | Severity: | S3 (Non-critical) |
| Version: | 5.2.4-falcon-alpha-debug | OS: | Linux (SUSE 10 64-bit) |
| Assigned to: | CPU Architecture: | Any | |
[9 Apr 2007 18:45]
MySQL Verification Team
Thank you for the bug report. Verified as described on F 6 32-bit.
[New Thread -1266914416 (LWP 8818)]
070409 15:37:46 [Note] /home/miguel/dbs/5.1f/libexec/mysqld: ready for connections.
Version: '5.2.4-falcon-alpha-debug' socket: '/tmp/mysql.sock' port: 3306 Source distribution
070409 15:37:46 [Note] SCHEDULER: Loaded 0 events
<cut>
Program received signal SIGSEGV, Segmentation fault.
[Switching to Thread -1267315824 (LWP 8906)]
0x084b1573 in NfsStorageTable::external_lock (this=0x9542fd8, thd=0x9524550, lock_type=0) at ha_falcon.cpp:1530
1530 if (storageConnection->startImplicitTransaction(thd->variables.tx_isolation))
(gdb) bt full
#0 0x084b1573 in NfsStorageTable::external_lock (this=0x9542fd8, thd=0x9524550, lock_type=0) at ha_falcon.cpp:1530
_db_func_ = 0x883d919 "lock_external"
_db_file_ = 0x883d3d1 "lock.cc"
_db_level_ = 13
_db_framep_ = (char **) 0x304
#1 0x083b5e4c in handler::ha_external_lock (this=0x9542fd8, thd=0x9524550, lock_type=0) at handler.cc:3613
_db_func_ = 0x883d919 "lock_external"
<cut>
[14 Jun 2007 15:23]
Jim Starkey
I can't say when or how we fixed it, but I can't reproduce the crash.

Description: I create a Falcon table. I execute a procedure which repeatedly INSERTs into the table. I switch connections. I execute a procedure which repeatedly SELECTs from the table. Crash. ChangeSet@1.2571, 2007-04-07 How to repeat: There will be two connections, T1 and T2. On T1, create a procedure that repeatedly INSERTs, and call it. On T2, create a procedure that repeatedly SELECTs, and call it. The T2 procedure has a continue handler to get around '157' errors. On T1, say: delimiter // use test create database d// use d create table t (s1 int) engine=falcon// create index i on t (s1)// create procedure p1 () begin declare v int default 0; while v < 500000 do if v mod 100 = 0 then select v; end if; insert into t values (v); set v = v + 1; end while; end// call p1()// Pause for a few seconds. On T2, say: delimiter // use d create procedure p3 () begin declare v int default 0; declare continue handler for sqlexception begin end; while v < 100000 do select v; select count(*) from t; set v = v + 1; end while; end// call p3()// Example run, as seen on T2: +------+ | v | +------+ | 1630 | +------+ 1 row in set (1.64 sec) +------+ | v | +------+ | 1631 | +------+ 1 row in set (1.64 sec) +------+ | v | +------+ | 1632 | +------+ 1 row in set (1.64 sec) ERROR 2013 (HY000): Lost connection to MySQL server during query