From: Date: April 7 2008 11:00am Subject: bk commit into 5.1 tree (dlenev:1.2584) BUG#35733 List-Archive: http://lists.mysql.com/commits/44977 X-Bug: 35733 Message-Id: <20080407090010.6CB34204338@mockturtle.local> Below is the list of changes that have just been committed into a local 5.1 repository of dlenev. When dlenev does a push these changes will be propagated to the main repository and, within 24 hours after the push, to the public repository. For information on how to access the public repository see http://dev.mysql.com/doc/mysql/en/installing-source-tree.html ChangeSet@stripped, 2008-04-07 12:59:57+04:00, dlenev@stripped +1 -0 Fix for bug #35733 "main.symlink.test fails". The problem was that symlink.test failed due to debug assertions or due to errors emitted for wrong statements (in non-debug builds) if 6.0 version of server was run with --thread-handling=pool-of-threads option. The above problems were caused by that on the one hand code mi_create() which handles case when error is returned relies on my_errno being set to appropriate non-0 value, but on the other it has not done this in case when error was emitted due to discovery that share for table which we are going to create is already present in the list of open shares. Running server with pool-of-threads option just exposed this bug since in this scheduler mode my_errno is reset to 0 when connection (THD) is reattached to the "real" thread. This fix ensures that code in mi_create() properly sets my_errno in the case described above. Since original reason that caused this bug to be exposed in 6.0 tree might also under very special conditions lead to incorrect behavior of earlier versions of server (i.e. to errors emitted for wrong statements) this patch is also being pushed into 5.1 tree. No test case is present as this code is already covered by a test case + pushbuild options combination in 6.0. storage/myisam/mi_create.c@stripped, 2008-04-07 12:59:52+04:00, dlenev@stripped +1 -0 Code in mi_create() which handles case when error is returned relies on my_errno being set to appropriate non-0 value. Adjusted code which emits error when we discover that share for table which we are going to create is already present in the list of open shares to do this. diff -Nrup a/storage/myisam/mi_create.c b/storage/myisam/mi_create.c --- a/storage/myisam/mi_create.c 2007-07-11 13:40:25 +04:00 +++ b/storage/myisam/mi_create.c 2008-04-07 12:59:52 +04:00 @@ -633,6 +633,7 @@ int mi_create(const char *name,uint keys my_printf_error(0, "MyISAM table '%s' is in use " "(most likely by a MERGE table). Try FLUSH TABLES.", MYF(0), name + dirname_length(name)); + my_errno= HA_ERR_TABLE_EXIST; goto err; }