From: Bjorn Munch
Date: September 20 2010 9:16am
Subject: bzr push into mysql-trunk-mtr branch (bjorn.munch:2967 to 2969)
List-Archive: http://lists.mysql.com/commits/118574
Message-Id: <201009200917.o8K9HNhe029214@khepri15.norway.sun.com>
MIME-Version: 1.0
Content-Type: multipart/mixed; boundary="===============2031916216=="
--===============2031916216==
MIME-Version: 1.0
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: 7bit
Content-Disposition: inline
2969 Bjorn Munch 2010-09-20 [merge]
upmerge 56753,56787
modified:
client/mysqltest.cc
mysql-test/lib/mtr_report.pm
mysql-test/r/mysqltest.result
mysql-test/suite/rpl/t/rpl_row_tbl_metadata.test
mysql-test/suite/sys_vars/t/div_precision_increment_func.test
mysql-test/t/mysqltest.test
2968 Bjorn Munch 2010-09-20 [merge]
merge from trunk
modified:
client/CMakeLists.txt
include/CMakeLists.txt
include/Makefile.am
mysql-test/r/sp-destruct.result
mysql-test/t/sp-destruct.test
scripts/CMakeLists.txt
scripts/make_win_bin_dist
sql/CMakeLists.txt
sql/mdl.cc
sql/mdl.h
sql/sp.cc
sql/sql_base.cc
sql/sql_base.h
sql/table.cc
2967 Bjorn Munch 2010-09-14 [merge]
upmerge 55426(55546), 56647
modified:
client/mysqltest.cc
=== modified file 'client/CMakeLists.txt'
--- a/client/CMakeLists.txt 2010-08-12 15:19:57 +0000
+++ b/client/CMakeLists.txt 2010-09-06 11:26:23 +0000
@@ -64,7 +64,10 @@ MYSQL_ADD_EXECUTABLE(mysqlslap mysqlslap
SET_SOURCE_FILES_PROPERTIES(mysqlslap.c PROPERTIES COMPILE_FLAGS "-DTHREADS")
TARGET_LINK_LIBRARIES(mysqlslap mysqlclient)
-ADD_EXECUTABLE(echo echo.c)
+# "WIN32" also covers 64 bit. "echo" is used in some files below "mysql-test/".
+IF(WIN32)
+ MYSQL_ADD_EXECUTABLE(echo echo.c)
+ENDIF(WIN32)
SET_TARGET_PROPERTIES (mysqlcheck mysqldump mysqlimport mysql_upgrade mysqlshow mysqlslap
PROPERTIES HAS_CXX TRUE)
=== modified file 'client/mysqltest.cc'
--- a/client/mysqltest.cc 2010-09-14 12:23:53 +0000
+++ b/client/mysqltest.cc 2010-09-20 08:24:39 +0000
@@ -2185,8 +2185,14 @@ void var_query_set(VAR *var, const char
DBUG_ENTER("var_query_set");
LINT_INIT(res);
+ /* Only white space or ) allowed past ending ` */
while (end > query && *end != '`')
+ {
+ if (*end && (*end != ' ' && *end != '\t' && *end != '\n' && *end != ')'))
+ die("Spurious text after `query` expression");
--end;
+ }
+
if (query == end)
die("Syntax error in query, missing '`'");
++query;
=== modified file 'include/CMakeLists.txt'
--- a/include/CMakeLists.txt 2010-08-12 15:27:53 +0000
+++ b/include/CMakeLists.txt 2010-09-13 10:26:57 +0000
@@ -54,6 +54,7 @@ SET(HEADERS
keycache.h
m_ctype.h
my_attribute.h
+ my_compiler.h
${HEADERS_GEN_CONFIGURE}
)
=== modified file 'include/Makefile.am'
--- a/include/Makefile.am 2010-09-01 13:05:01 +0000
+++ b/include/Makefile.am 2010-09-13 10:36:27 +0000
@@ -32,8 +32,9 @@ pkginclude_HEADERS = $(HEADERS_ABI) my_d
decimal.h errmsg.h my_global.h my_net.h \
my_getopt.h sslopt-longopts.h my_dir.h \
sslopt-vars.h sslopt-case.h sql_common.h keycache.h \
- m_ctype.h my_attribute.h $(HEADERS_GEN_CONFIGURE) \
- $(HEADERS_GEN_MAKE) probes_mysql.h probes_mysql_nodtrace.h
+ m_ctype.h my_attribute.h my_compiler.h \
+ $(HEADERS_GEN_CONFIGURE) $(HEADERS_GEN_MAKE) \
+ probes_mysql.h probes_mysql_nodtrace.h
noinst_HEADERS = lf.h my_bit.h \
heap.h my_bitmap.h my_uctype.h password.h \
@@ -47,7 +48,7 @@ noinst_HEADERS = lf.h my_bit.h \
my_user.h my_atomic.h atomic/nolock.h \
atomic/rwlock.h atomic/x86-gcc.h atomic/generic-msvc.h \
atomic/gcc_builtins.h my_libwrap.h my_stacktrace.h \
- atomic/solaris.h mysql/innodb_priv.h my_compiler.h
+ atomic/solaris.h mysql/innodb_priv.h
pkgpsiinclude_HEADERS = mysql/psi/psi.h mysql/psi/mysql_thread.h \
mysql/psi/mysql_file.h \
=== modified file 'mysql-test/lib/mtr_report.pm'
--- a/mysql-test/lib/mtr_report.pm 2010-06-10 08:34:16 +0000
+++ b/mysql-test/lib/mtr_report.pm 2010-09-20 08:12:39 +0000
@@ -229,7 +229,8 @@ sub mtr_report_stats ($$;$) {
# Find out how we where doing
# ----------------------------------------------------------------------
- my $tot_skiped= 0;
+ my $tot_skipped= 0;
+ my $tot_skipdetect= 0;
my $tot_passed= 0;
my $tot_failed= 0;
my $tot_tests= 0;
@@ -246,8 +247,9 @@ sub mtr_report_stats ($$;$) {
}
elsif ( $tinfo->{'result'} eq 'MTR_RES_SKIPPED' )
{
- # Test was skipped
- $tot_skiped++;
+ # Test was skipped (disabled not counted)
+ $tot_skipped++ unless $tinfo->{'disable'};
+ $tot_skipdetect++ if $tinfo->{'skip_detected_by_test'};
}
elsif ( $tinfo->{'result'} eq 'MTR_RES_PASSED' )
{
@@ -376,6 +378,9 @@ sub mtr_report_stats ($$;$) {
print "All $tot_tests tests were successful.\n\n";
}
+ print "$tot_skipped tests were skipped, ".
+ "$tot_skipdetect by the test itself.\n\n" if $tot_skipped;
+
if ( $tot_failed != 0 || $found_problems)
{
mtr_error("there were failing test cases") unless $dont_error;
=== modified file 'mysql-test/r/mysqltest.result'
--- a/mysql-test/r/mysqltest.result 2010-09-01 14:02:56 +0000
+++ b/mysql-test/r/mysqltest.result 2010-09-20 08:24:39 +0000
@@ -177,6 +177,9 @@ mysqltest: At line 1: End of line junk d
"
mysqltest: At line 1: Extra delimiter ";" found
mysqltest: At line 1: Extra delimiter ";" found
+mysqltest: At line 1: Spurious text after `query` expression
+mysqltest: At line 1: Spurious text after `query` expression
+mysqltest: At line 2: Spurious text after `query` expression
mysqltest: At line 1: Missing argument(s) to 'error'
mysqltest: At line 1: Missing argument(s) to 'error'
mysqltest: At line 1: The sqlstate definition must start with an uppercase S
=== modified file 'mysql-test/r/sp-destruct.result'
--- a/mysql-test/r/sp-destruct.result 2010-03-03 09:24:53 +0000
+++ b/mysql-test/r/sp-destruct.result 2010-09-13 09:58:11 +0000
@@ -134,3 +134,19 @@ Warning 1405 Failed to revoke all privil
# Restore the procs_priv table
RENAME TABLE procs_priv_backup TO mysql.procs_priv;
FLUSH TABLE mysql.procs_priv;
+#
+# Bug #56137 "Assertion `thd->lock == 0' failed on upgrading from
+# 5.1.50 to 5.5.6".
+#
+drop database if exists mysqltest;
+# Backup mysql.proc.
+flush table mysql.proc;
+create database mysqltest;
+# Corrupt mysql.proc to make it unusable by current version of server.
+alter table mysql.proc drop column type;
+# The below statement should not cause assertion failure.
+drop database mysqltest;
+Warnings:
+Error 1695 Column count of mysql.proc is wrong. Expected 20, found 19. The table is probably corrupted
+# Restore mysql.proc.
+drop table mysql.proc;
=== modified file 'mysql-test/suite/rpl/t/rpl_row_tbl_metadata.test'
--- a/mysql-test/suite/rpl/t/rpl_row_tbl_metadata.test 2010-01-14 10:49:40 +0000
+++ b/mysql-test/suite/rpl/t/rpl_row_tbl_metadata.test 2010-09-15 12:56:22 +0000
@@ -205,7 +205,7 @@ DROP TABLE `t1`;
-- echo === Using mysqlbinlog to detect failure. Before the patch mysqlbinlog would find a corrupted event, thence would fail.
--- let $MYSQLD_DATADIR= `SELECT @@datadir`;
+-- let $MYSQLD_DATADIR= `SELECT @@datadir`
-- exec $MYSQL_BINLOG $MYSQLD_DATADIR/master-bin.000001 > $MYSQLTEST_VARDIR/tmp/mysqlbinlog_bug42749.binlog
-- remove_file $MYSQLTEST_VARDIR/tmp/mysqlbinlog_bug42749.binlog
@@ -330,7 +330,7 @@ while($ntables)
-- echo ### assertion: check that binlog is not corrupt. Using mysqlbinlog to
-- echo ### detect failure. Before the patch mysqlbinlog would find
-- echo ### a corrupted event, thence would fail.
--- let $MYSQLD_DATADIR= `SELECT @@datadir`;
+-- let $MYSQLD_DATADIR= `SELECT @@datadir`
-- exec $MYSQL_BINLOG -v --hex $MYSQLD_DATADIR/master-bin.000001 > $MYSQLTEST_VARDIR/tmp/mysqlbinlog_bug50018.binlog
## clean up
=== modified file 'mysql-test/suite/sys_vars/t/div_precision_increment_func.test'
--- a/mysql-test/suite/sys_vars/t/div_precision_increment_func.test 2009-12-22 09:35:56 +0000
+++ b/mysql-test/suite/sys_vars/t/div_precision_increment_func.test 2010-09-20 08:21:55 +0000
@@ -19,7 +19,7 @@
# #
################################################################################
-let $save_div_precision_increment = `SELECT @@global.div_precision_increment`
+let $save_div_precision_increment = `SELECT @@global.div_precision_increment`;
#SET @save_div_precision_increment = @@global.div_precision_increment;
=== modified file 'mysql-test/t/mysqltest.test'
--- a/mysql-test/t/mysqltest.test 2010-09-01 14:02:56 +0000
+++ b/mysql-test/t/mysqltest.test 2010-09-20 08:24:39 +0000
@@ -494,6 +494,23 @@ remove_file $MYSQLTEST_VARDIR/tmp/mysqlt
--error 1
--exec echo "--disable_query_log;" | $MYSQL_TEST 2>&1
+#
+# Extra text after ``
+#
+--error 1
+-- exec echo "let \$x= \`select 1\` BOO ;" | $MYSQL_TEST 2>&1
+--error 1
+-- exec echo "--let \$x= \`select 1\`;" | $MYSQL_TEST 2>&1
+--write_file $MYSQLTEST_VARDIR/tmp/mysqltest.sql
+# Missing ; in next line should be detected and cause failure
+let $x= `select 1`
+let $x= 2;
+echo $x;
+EOF
+--error 1
+--exec $MYSQL_TEST < $MYSQLTEST_VARDIR/tmp/mysqltest.sql 2>&1
+remove_file $MYSQLTEST_VARDIR/tmp/mysqltest.sql;
+
# Allow trailing # comment
--sleep 1 # Wait for insert delayed to be executed.
=== modified file 'mysql-test/t/sp-destruct.test'
--- a/mysql-test/t/sp-destruct.test 2010-04-16 14:24:06 +0000
+++ b/mysql-test/t/sp-destruct.test 2010-09-13 09:58:11 +0000
@@ -222,3 +222,33 @@ SHOW WARNINGS;
--echo # Restore the procs_priv table
RENAME TABLE procs_priv_backup TO mysql.procs_priv;
FLUSH TABLE mysql.procs_priv;
+
+
+--echo #
+--echo # Bug #56137 "Assertion `thd->lock == 0' failed on upgrading from
+--echo # 5.1.50 to 5.5.6".
+--echo #
+--disable_warnings
+drop database if exists mysqltest;
+--enable_warnings
+--echo # Backup mysql.proc.
+flush table mysql.proc;
+let $MYSQLD_DATADIR= `select @@datadir`;
+--copy_file $MYSQLD_DATADIR/mysql/proc.frm $MYSQLTEST_VARDIR/tmp/proc.frm
+--copy_file $MYSQLD_DATADIR/mysql/proc.MYD $MYSQLTEST_VARDIR/tmp/proc.MYD
+--copy_file $MYSQLD_DATADIR/mysql/proc.MYI $MYSQLTEST_VARDIR/tmp/proc.MYI
+
+create database mysqltest;
+--echo # Corrupt mysql.proc to make it unusable by current version of server.
+alter table mysql.proc drop column type;
+--echo # The below statement should not cause assertion failure.
+drop database mysqltest;
+
+--echo # Restore mysql.proc.
+drop table mysql.proc;
+--copy_file $MYSQLTEST_VARDIR/tmp/proc.frm $MYSQLD_DATADIR/mysql/proc.frm
+--copy_file $MYSQLTEST_VARDIR/tmp/proc.MYD $MYSQLD_DATADIR/mysql/proc.MYD
+--copy_file $MYSQLTEST_VARDIR/tmp/proc.MYI $MYSQLD_DATADIR/mysql/proc.MYI
+--remove_file $MYSQLTEST_VARDIR/tmp/proc.frm
+--remove_file $MYSQLTEST_VARDIR/tmp/proc.MYD
+--remove_file $MYSQLTEST_VARDIR/tmp/proc.MYI
=== modified file 'scripts/CMakeLists.txt'
--- a/scripts/CMakeLists.txt 2010-08-23 17:01:12 +0000
+++ b/scripts/CMakeLists.txt 2010-09-13 10:26:57 +0000
@@ -139,6 +139,7 @@ ELSE()
ENDIF()
SET(HOSTNAME "hostname")
+SET(MYSQLD_USER "mysql")
# Required for mysqlbug until autotools are deprecated, once done remove these
# and expand default cmake variables
=== modified file 'scripts/make_win_bin_dist'
--- a/scripts/make_win_bin_dist 2010-07-23 20:14:04 +0000
+++ b/scripts/make_win_bin_dist 2010-08-31 14:33:19 +0000
@@ -260,6 +260,7 @@ cp include/mysql.h \
include/keycache.h \
include/m_ctype.h \
include/my_attribute.h \
+ include/my_compiler.h \
include/mysqld_error.h \
include/sql_state.h \
include/mysqld_ername.h \
=== modified file 'sql/CMakeLists.txt'
--- a/sql/CMakeLists.txt 2010-08-20 08:48:59 +0000
+++ b/sql/CMakeLists.txt 2010-09-13 09:58:11 +0000
@@ -289,8 +289,7 @@ IF(WIN32 AND MYSQLD_EXECUTABLE)
COMMAND ${CMAKE_COMMAND}
${CONFIG_PARAM} -P ${CMAKE_CURRENT_BINARY_DIR}/create_initial_db.cmake
WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/data
- COMMAND ${CMAKE_COMMAND} -E touch initdb.dep
- WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
+ COMMAND ${CMAKE_COMMAND} -E touch ${CMAKE_CURRENT_BINARY_DIR}/initdb.dep
DEPENDS mysqld
)
ADD_CUSTOM_TARGET(initial_database
=== modified file 'sql/mdl.cc'
--- a/sql/mdl.cc 2010-08-20 08:48:59 +0000
+++ b/sql/mdl.cc 2010-09-13 10:26:57 +0000
@@ -124,7 +124,6 @@ public:
Deadlock_detection_visitor(MDL_context *start_node_arg)
: m_start_node(start_node_arg),
m_victim(NULL),
- m_current_search_depth(0),
m_found_deadlock(FALSE)
{}
virtual bool enter_node(MDL_context *node);
@@ -133,6 +132,8 @@ public:
virtual bool inspect_edge(MDL_context *dest);
MDL_context *get_victim() const { return m_victim; }
+
+ void abort_traversal(MDL_context *node);
private:
/**
Change the deadlock victim to a new one if it has lower deadlock
@@ -147,13 +148,6 @@ private:
MDL_context *m_start_node;
/** If a deadlock is found, the context that identifies the victim. */
MDL_context *m_victim;
- /** Set to the 0 at start. Increased whenever
- we descend into another MDL context (aka traverse to the next
- wait-for graph node). When MAX_SEARCH_DEPTH is reached, we
- assume that a deadlock is found, even if we have not found a
- loop.
- */
- uint m_current_search_depth;
/** TRUE if we found a deadlock. */
bool m_found_deadlock;
/**
@@ -187,7 +181,7 @@ private:
bool Deadlock_detection_visitor::enter_node(MDL_context *node)
{
- m_found_deadlock= ++m_current_search_depth >= MAX_SEARCH_DEPTH;
+ m_found_deadlock= m_current_search_depth >= MAX_SEARCH_DEPTH;
if (m_found_deadlock)
{
DBUG_ASSERT(! m_victim);
@@ -207,7 +201,6 @@ bool Deadlock_detection_visitor::enter_n
void Deadlock_detection_visitor::leave_node(MDL_context *node)
{
- --m_current_search_depth;
if (m_found_deadlock)
opt_change_victim_to(node);
}
@@ -252,6 +245,21 @@ Deadlock_detection_visitor::opt_change_v
/**
+ Abort traversal of a wait-for graph and report a deadlock.
+
+ @param node Node which we were about to visit when abort
+ was initiated.
+*/
+
+void Deadlock_detection_visitor::abort_traversal(MDL_context *node)
+{
+ DBUG_ASSERT(! m_victim);
+ m_found_deadlock= TRUE;
+ opt_change_victim_to(node);
+}
+
+
+/**
Get a bit corresponding to enum_mdl_type value in a granted/waiting bitmaps
and compatibility matrices.
*/
@@ -2056,8 +2064,13 @@ bool MDL_lock::visit_subgraph(MDL_ticket
are visiting it but this is OK: in the worst case we might do some
extra work and one more context might be chosen as a victim.
*/
+ ++gvisitor->m_current_search_depth;
+
if (gvisitor->enter_node(src_ctx))
+ {
+ --gvisitor->m_current_search_depth;
goto end;
+ }
/*
We do a breadth-first search first -- that is, inspect all
@@ -2114,6 +2127,7 @@ bool MDL_lock::visit_subgraph(MDL_ticket
end_leave_node:
gvisitor->leave_node(src_ctx);
+ --gvisitor->m_current_search_depth;
end:
mysql_prlock_unlock(&m_rwlock);
=== modified file 'sql/mdl.h'
--- a/sql/mdl.h 2010-08-20 08:48:59 +0000
+++ b/sql/mdl.h 2010-09-13 10:26:57 +0000
@@ -385,7 +385,10 @@ public:
virtual bool inspect_edge(MDL_context *dest) = 0;
virtual ~MDL_wait_for_graph_visitor();
- MDL_wait_for_graph_visitor() :m_lock_open_count(0) {}
+ MDL_wait_for_graph_visitor() :m_lock_open_count(0),
+ m_current_search_depth(0)
+ { }
+ virtual void abort_traversal(MDL_context *node) = 0;
public:
/**
XXX, hack: During deadlock search, we may need to
@@ -396,6 +399,17 @@ public:
LOCK_open since it has significant performance impacts.
*/
uint m_lock_open_count;
+ /**
+ Set to the 0 at start. Increased whenever
+ we descend into another MDL context (aka traverse to the next
+ wait-for graph node). When MAX_SEARCH_DEPTH is reached, we
+ assume that a deadlock is found, even if we have not found a
+ loop.
+
+ XXX: This member belongs to this class only temporarily until
+ bug #56405 is fixed.
+ */
+ uint m_current_search_depth;
};
/**
=== modified file 'sql/sp.cc'
--- a/sql/sp.cc 2010-07-29 13:37:49 +0000
+++ b/sql/sp.cc 2010-09-13 09:58:11 +0000
@@ -440,6 +440,7 @@ static TABLE *open_proc_table_for_update
{
TABLE_LIST table_list;
TABLE *table;
+ MDL_ticket *mdl_savepoint= thd->mdl_context.mdl_savepoint();
DBUG_ENTER("open_proc_table_for_update");
table_list.init_one_table("mysql", 5, "proc", 4, "proc", TL_WRITE);
@@ -450,6 +451,9 @@ static TABLE *open_proc_table_for_update
if (!proc_table_intact.check(table, &proc_table_def))
DBUG_RETURN(table);
+ close_thread_tables(thd);
+ thd->mdl_context.rollback_to_savepoint(mdl_savepoint);
+
DBUG_RETURN(NULL);
}
=== modified file 'sql/sql_base.cc'
--- a/sql/sql_base.cc 2010-08-20 08:48:59 +0000
+++ b/sql/sql_base.cc 2010-09-13 10:26:57 +0000
@@ -100,6 +100,8 @@ bool No_such_table_error_handler::safely
TABLE_SHAREs, refresh_version and the table id counter.
*/
mysql_mutex_t LOCK_open;
+mysql_mutex_t LOCK_dd_owns_lock_open;
+uint dd_owns_lock_open= 0;
#ifdef HAVE_PSI_INTERFACE
static PSI_mutex_key key_LOCK_open;
@@ -298,6 +300,7 @@ bool table_def_init(void)
init_tdc_psi_keys();
#endif
mysql_mutex_init(key_LOCK_open, &LOCK_open, MY_MUTEX_INIT_FAST);
+ mysql_mutex_init(NULL, &LOCK_dd_owns_lock_open, MY_MUTEX_INIT_FAST);
oldest_unused_share= &end_of_unused_share;
end_of_unused_share.prev= &oldest_unused_share;
@@ -341,6 +344,7 @@ void table_def_free(void)
table_def_inited= 0;
/* Free table definitions. */
my_hash_free(&table_def_cache);
+ mysql_mutex_destroy(&LOCK_dd_owns_lock_open);
mysql_mutex_destroy(&LOCK_open);
}
DBUG_VOID_RETURN;
=== modified file 'sql/sql_base.h'
--- a/sql/sql_base.h 2010-08-20 08:48:59 +0000
+++ b/sql/sql_base.h 2010-09-13 10:26:57 +0000
@@ -71,6 +71,8 @@ enum enum_tdc_remove_table_type {TDC_RT_
bool check_dup(const char *db, const char *name, TABLE_LIST *tables);
extern mysql_mutex_t LOCK_open;
+extern mysql_mutex_t LOCK_dd_owns_lock_open;
+extern uint dd_owns_lock_open;
bool table_cache_init(void);
void table_cache_free(void);
bool table_def_init(void);
=== modified file 'sql/table.cc'
--- a/sql/table.cc 2010-08-26 15:17:35 +0000
+++ b/sql/table.cc 2010-09-13 10:26:57 +0000
@@ -3092,7 +3092,30 @@ bool TABLE_SHARE::visit_subgraph(Wait_fo
holding a write-lock on MDL_lock::m_rwlock.
*/
if (gvisitor->m_lock_open_count++ == 0)
+ {
+ /*
+ To circumvent bug #56405 "Deadlock in the MDL deadlock detector"
+ we don't try to lock LOCK_open mutex if some thread doing
+ deadlock detection already owns it and current search depth is
+ greater than 0. Instead we report a deadlock.
+
+ TODO/FIXME: The proper fix for this bug is to use rwlocks for
+ protection of table shares/instead of LOCK_open.
+ Unfortunately it requires more effort/has significant
+ performance effect.
+ */
+ mysql_mutex_lock(&LOCK_dd_owns_lock_open);
+ if (gvisitor->m_current_search_depth > 0 && dd_owns_lock_open > 0)
+ {
+ mysql_mutex_unlock(&LOCK_dd_owns_lock_open);
+ --gvisitor->m_lock_open_count;
+ gvisitor->abort_traversal(src_ctx);
+ return TRUE;
+ }
+ ++dd_owns_lock_open;
+ mysql_mutex_unlock(&LOCK_dd_owns_lock_open);
mysql_mutex_lock(&LOCK_open);
+ }
I_P_List_iterator
tables_it(used_tables);
@@ -3107,8 +3130,12 @@ bool TABLE_SHARE::visit_subgraph(Wait_fo
goto end;
}
+ ++gvisitor->m_current_search_depth;
if (gvisitor->enter_node(src_ctx))
+ {
+ --gvisitor->m_current_search_depth;
goto end;
+ }
while ((table= tables_it++))
{
@@ -3131,10 +3158,16 @@ bool TABLE_SHARE::visit_subgraph(Wait_fo
end_leave_node:
gvisitor->leave_node(src_ctx);
+ --gvisitor->m_current_search_depth;
end:
if (gvisitor->m_lock_open_count-- == 1)
+ {
mysql_mutex_unlock(&LOCK_open);
+ mysql_mutex_lock(&LOCK_dd_owns_lock_open);
+ --dd_owns_lock_open;
+ mysql_mutex_unlock(&LOCK_dd_owns_lock_open);
+ }
return result;
}
--===============2031916216==
MIME-Version: 1.0
Content-Type: text/bzr-bundle; charset="us-ascii";
name="bzr/bjorn.munch@stripped"
Content-Transfer-Encoding: 7bit
Content-Disposition: inline
# Bazaar merge directive format 2 (Bazaar 0.90)
# revision_id: bjorn.munch@stripped
# target_branch: file:///home/bm136801/my/mtr-tr/
# testament_sha1: 26ee8b8b79b81a5d9d0c7a86bb484e363d0db7b0
# timestamp: 2010-09-20 11:17:23 +0200
# source_branch: file:///home/bm136801/my/mysql-trunk/
# base_revision_id: bjorn.munch@stripped\
# 4fj042ktf50y00i1
#
# Begin bundle
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
--===============2031916216==--