From: Dmitry Lenev Date: February 13 2011 7:47am Subject: bzr commit into mysql-5.1 branch (Dmitry.Lenev:3591) Bug#11766714 List-Archive: http://lists.mysql.com/commits/131160 X-Bug: 11766714 Message-Id: <20110213074802.81CE37405CE@bandersnatch> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="===============1855561477==" --===============1855561477== MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Content-Disposition: inline #At file:///home/dlenev/src/bzr/mysql-5.1-59888/ based on revid:georgi.kodinov@stripped 3591 Dmitry Lenev 2011-02-13 Fix for bug#11766714 (former bug @59888) "debug assertion when attempt to create spatial index on char > 31 bytes". Attempt to create spatial index on char field with length greater than 31 byte led to assertion failure on server compiled with safemutex support. The problem occurred in mi_create() function which was called to create a new version of table being altered. This function failed since it detected an attempt to create a spatial key on non-binary column and tried to return an error. On its error path it tried to unlock THR_LOCK_myisam mutex which has not been not locked at this point. Indeed such an incorrect behavior was caught by safemutex wrapper and caused assertion failure. This patch fixes the problem by ensuring that mi_create() doesn't releases THR_LOCK_myisam mutex on error path if it was not acquired. @ mysql-test/r/gis.result Added test for bug @59888 "debug assertion when attempt to create spatial index on char > 31 bytes". @ mysql-test/t/gis.test Added test for bug @59888 "debug assertion when attempt to create spatial index on char > 31 bytes". @ storage/myisam/mi_create.c Changed mi_create() not to release THR_LOCK_myisam mutex on error path if it was not acquired. modified: mysql-test/r/gis.result mysql-test/t/gis.test storage/myisam/mi_create.c === modified file 'mysql-test/r/gis.result' --- a/mysql-test/r/gis.result 2011-02-02 13:17:48 +0000 +++ b/mysql-test/r/gis.result 2011-02-13 07:47:48 +0000 @@ -1034,4 +1034,12 @@ p NULL NULL drop table t1; +# +# Test for bug #59888 "debug assertion when attempt to create spatial index +# on char > 31 bytes". +# +create table t1(a char(32) not null) engine=myisam; +create spatial index i on t1 (a); +ERROR HY000: Can't create table '#sql-temporary' (errno: 140) +drop table t1; End of 5.1 tests === modified file 'mysql-test/t/gis.test' --- a/mysql-test/t/gis.test 2011-01-14 20:56:09 +0000 +++ b/mysql-test/t/gis.test 2011-02-13 07:47:48 +0000 @@ -754,4 +754,16 @@ insert into t1 values (geomfromtext("poi select * from (select polygon(t1.a) as p from t1 order by t1.a) d; drop table t1; + +--echo # +--echo # Test for bug #59888 "debug assertion when attempt to create spatial index +--echo # on char > 31 bytes". +--echo # +create table t1(a char(32) not null) engine=myisam; +--replace_regex /'[^']*test\.#sql-[0-9a-f_]*'/'#sql-temporary'/ +--error ER_CANT_CREATE_TABLE +create spatial index i on t1 (a); +drop table t1; + + --echo End of 5.1 tests === modified file 'storage/myisam/mi_create.c' --- a/storage/myisam/mi_create.c 2010-11-10 21:14:47 +0000 +++ b/storage/myisam/mi_create.c 2011-02-13 07:47:48 +0000 @@ -272,7 +272,7 @@ int mi_create(const char *name,uint keys keyseg->type != HA_KEYTYPE_VARBINARY2) { my_errno=HA_WRONG_CREATE_OPTION; - goto err; + goto err_no_lock; } } keydef->keysegs+=sp_segs; @@ -281,7 +281,7 @@ int mi_create(const char *name,uint keys min_key_length_skip+=SPLEN*2*SPDIMS; #else my_errno= HA_ERR_UNSUPPORTED; - goto err; + goto err_no_lock; #endif /*HAVE_SPATIAL*/ } else if (keydef->flag & HA_FULLTEXT) @@ -297,7 +297,7 @@ int mi_create(const char *name,uint keys keyseg->type != HA_KEYTYPE_VARTEXT2) { my_errno=HA_WRONG_CREATE_OPTION; - goto err; + goto err_no_lock; } if (!(keyseg->flag & HA_BLOB_PART) && (keyseg->type == HA_KEYTYPE_VARTEXT1 || @@ -422,7 +422,7 @@ int mi_create(const char *name,uint keys if (keydef->keysegs > MI_MAX_KEY_SEG) { my_errno=HA_WRONG_CREATE_OPTION; - goto err; + goto err_no_lock; } /* key_segs may be 0 in the case when we only want to be able to @@ -447,7 +447,7 @@ int mi_create(const char *name,uint keys length >= MI_MAX_KEY_BUFF) { my_errno=HA_WRONG_CREATE_OPTION; - goto err; + goto err_no_lock; } set_if_bigger(max_key_block_length,keydef->block_length); keydef->keylength= (uint16) key_length; @@ -494,7 +494,7 @@ int mi_create(const char *name,uint keys "indexes and/or unique constraints.", MYF(0), name + dirname_length(name)); my_errno= HA_WRONG_CREATE_OPTION; - goto err; + goto err_no_lock; } bmove(share.state.header.file_version,(uchar*) myisam_file_magic,4); @@ -827,12 +827,14 @@ int mi_create(const char *name,uint keys errpos=0; pthread_mutex_unlock(&THR_LOCK_myisam); if (my_close(file,MYF(0))) - goto err; + goto err_no_lock; my_free((char*) rec_per_key_part,MYF(0)); DBUG_RETURN(0); err: pthread_mutex_unlock(&THR_LOCK_myisam); + +err_no_lock: save_errno=my_errno; switch (errpos) { case 3: --===============1855561477== MIME-Version: 1.0 Content-Type: text/bzr-bundle; charset="us-ascii"; name="bzr/dmitry.lenev@stripped" Content-Transfer-Encoding: 7bit Content-Disposition: inline # Bazaar merge directive format 2 (Bazaar 0.90) # revision_id: dmitry.lenev@stripped # target_branch: file:///home/dlenev/src/bzr/mysql-5.1-59888/ # testament_sha1: bc25bcd7441e50dd1d6f82b97fae4d0fc34b9b68 # timestamp: 2011-02-13 10:48:02 +0300 # base_revision_id: georgi.kodinov@stripped\ # 9n20d3h8s4hug4jd # # Begin bundle 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 --===============1855561477==--