- 26 Feb, 2010 2 commits
-
-
Jon Olav Hauglid authored
The problem was that ALTER TABLE on a merge table which was locked using LOCK TABLE ... WRITE, by mistake gave ER_TABLE_NOT_LOCKED_FOR_WRITE. During opening of the table to be ALTERed, open_table() tried to get an upgradable metadata lock. In LOCK TABLEs mode, this lock must already exist (i.e. taken by LOCK TABLE) as new locks of this type cannot be acquired for fear of deadlock. So in LOCK TABLEs mode, open_table() tried to find an existing upgradable lock for the table to be altered. The problem was that open_table() also tried to find upgradable metadata locks for children of merge tables even if no such locks are needed to execute ALTER TABLE on merge tables. This patch fixes the problem by making sure that open tables code only searches for upgradable metadata locks for the merge table and not for the merge children tables. The patch also fixes a related bug where an upgradable metadata lock was aquired outside of LOCK TABLEs mode even if the table in question was temporary. This bug meant that LOCK TABLES or DDL on temporary tables by mistake could be blocked/aborted by locks held on base tables with the same table name by other connections. Test cases added to merge.test and lock_multi.test.
-
Jon Olav Hauglid authored
Attempts to execute RESET statements within a transaction that had acquired metadata locks, led to an assertion failure on debug servers. This bug didn't cause any problems on release builds. The triggered assert is designed to check that caches are not flushed or reset while having active transactions. It is triggered if acquired metadata locks exist that are not from LOCK TABLE or HANDLER statements. In this case it was triggered by RESET QUERY CACHE while having an active transaction that had acquired locks. The reason the assertion was triggered, was that RESET statements, unlike the similar FLUSH statements, was not causing an implicit commit. This patch fixes the problem by making sure RESET statements commit the current transaction before executing. The commit causes acquired metadata locks to be released, preventing the assertion from being triggered. Incompatible change: This patch changes RESET statements so that they cause an implicit commit. Test case added to query_cache.test.
-
- 25 Feb, 2010 3 commits
-
-
Jon Olav Hauglid authored
bool MDL_context::try_acquire_lock(MDL_request*) This assert was triggered in the following way: 1) HANDLER OPEN t1 from connection 1 2) DROP TABLE t1 from connection 2. This will block due to the metadata lock held by the open handler in connection 1. 3) DML statement (e.g. INSERT) from connection 1. This will close the table opened by the HANDLER in 1) and release its metadata lock. This is done due to the pending exclusive metadata lock from 2). 4) DROP TABLE t1 from connection 2 now completes and removes table t1. 5) HANDLER READ from connection 1. Since the handler table was closed in 3), the handler code will try to reopen the table. First a new metadata lock on t1 will be granted before the command fails since the table was removed in 4). 6) HANDLER READ from connection 1. This caused the assert. The reason for the assert was that the MDL_request's pointer to the lock ticket was not reset when the statement failed. HANDLER READ then tried to acquire a lock using the same MDL_request object, triggering the assert. This bug was only noticeable on debug builds and did not cause any problems on release builds. This patch fixes the problem by assuring that the pointer to the metadata lock ticket is reset when reopening of handler tables fails. Test case added to handler.inc
-
Jon Olav Hauglid authored
-
Vladislav Vaintroub authored
-lthread works fine in most cases, but at least with gcc 3.4.6 on x86, dlopen() crashes when libpthread is not used. Note : the workaround existed prior and did not work since CMAKE_THREADS_LIBS_INIT was already in cache. Now, use SET(.. CACHE FORCE) to overwrite the cached value.
-
- 24 Feb, 2010 10 commits
-
-
Vladislav Vaintroub authored
-
Jonathan Perkin authored
- Remove INSTALL-BINARY from installed docs directory, we provide a copy in the root directory (but perhaps this should be revisited later). - Disable audit_null and daemon_example plugins. - Fix the docs directory. - Remove mysql-test/Makefile.in - Build and install mysql_tzinfo_to_sql - Remove share/charsets/languages.html
-
Vladislav Vaintroub authored
In the worst case possible scenario (no bzr, in-source build), make dist produced a package that compiled ok with autotools but failed to package because extra make_binary_distribution was found in source package and was not built. make_binary_distribution contained paths of the build machine. Fix: exclude some scripts that are produced in cmake build. Note that there is no good general fix for it in this specific scenario. it is advisable to build source packages out of source or in bzr repo.
-
Vladislav Vaintroub authored
actually "system"), --with-ssl should be "bundled". Fixes error on sol-gcc-x86, where build machine had openssl but not the test box.
-
Jon Olav Hauglid authored
This patch prevents system threads and system table accesses from using user-specified values for "lock_wait_timeout". Instead all such accesses are done using the default value (1 year). This prevents background tasks (such as replication, events, accessing stored function definitions, logging, reading time-zone information, etc.) from failing in cases where the global value of "lock_wait_timeout" is set very low. The patch also simplifies the open tables API. Rather than adding another convenience function for opening and locking system tables, this patch removes most of the existing convenience functions for open_and_lock_tables_derived(). Before, open_and_lock_tables() was a convenience function that enforced derived tables handling, while open_and_lock_tables_derived() was the main function where derived tables handling was optional. Now, this convencience function is gone and the main function is renamed to open_and_lock_tables(). No test case added as it would have required the use of --sleep to check that system threads and system tables have a different timeout value from the user-specified "lock_wait_timeout" system variable.
-
Alexander Nozdrin authored
-
Marc Alff authored
-
Vladislav Vaintroub authored
-
Vladislav Vaintroub authored
HAVE_IBGCC_ATOMIC_BUILTINS=>HAVE_IB_GCC_ATOMIC_BUILTINS. Due to the typo, detection of atomics was broken. It also lead to valgrind error during shutdown (access to freed memory),which is likely present in all builds where atomics are not used.
-
Marc Alff authored
Backport to 5.5.99
-
- 23 Feb, 2010 12 commits
-
-
Vladislav Vaintroub authored
-
Vladislav Vaintroub authored
Reason: implementation of send/reap in mysqltest uses the same "embedded" connection in a thread different from current, so thread stack has to change when connection is used in different OS thread..
-
Marc Alff authored
Backport to 5.5.99
-
Alexander Nozdrin authored
-
Vladislav Vaintroub authored
-
Vladislav Vaintroub authored
-
Alexander Nozdrin authored
-
Vladislav Vaintroub authored
-
Vladislav Vaintroub authored
It appears that stack overflow checks for recusrive stored procedure calls, that run in the normal server, did not work in embedded and were dummified with preprocessor magic( #ifndef EMBEDDED_SERVER ). The fix is to remove ifdefs, there is no reason not to run overflow checks and crash in deeply recursive calls. Note: Start of the stack (thd->thread_stack variable) in embedded is not necessarily exact but stil provides the best guess. Unless the caller of mysql_read_connect() is already deep in the stack, thd->thread_stack variable should approximate stack start address well.
-
Vladislav Vaintroub authored
The bug was that ./configure was passing paramers to subscripts as $@, and to handle embedded spaces it needs to be quoted as "$@". This resulting into a bug when ./configure was called e.g with CFLAGS='-m64 -Xstrconst'.. Additionally, fixed cmake/configure.pl did not handle environment variables passed on the command line. this is fixed in this push
-
Jonathan Perkin authored
-
Jonathan Perkin authored
-
- 22 Feb, 2010 7 commits
-
-
Vladislav Vaintroub authored
Fix contains of : - splitting CC/CXX if there are more that 2 space-delimited tokens, add the rest to CFLAGS (in this case CC was set to "ccache gcc --pipe", and this broke recognition of gcc compiler as CMake understands CC consisting of 2 space delimited tokens but not more) - add my_new.cc to mysys fle list if C++ operator new is not found. Always, not only for gcc (the original problem was that missing operator new when compiling with CXX=gcc)
-
Vladislav Vaintroub authored
-
Alexander Nozdrin authored
Conflicts: - mysql-test/r/mysqld--help-notwin.result - mysql-test/r/mysqld--help-win.result
-
Alexander Nozdrin authored
-
Alexander Nozdrin authored
The patch is ready and will be pushed via -bugfixing.
-
Luis Soares authored
-
Luis Soares authored
There was an erroneous parameter when calling flush_master_info from write_ignored_events_info_to_relay_log which could lead to a server crash. This happens because the I/O thread releases the log_lock before calling the flush_master_info. Set the function to call flush_master_info with third parameter to true, so that the mutex is properly taken.
-
- 21 Feb, 2010 3 commits
-
-
Alexander Nozdrin authored
-
Alexander Nozdrin authored
-
Vladislav Vaintroub authored
-
- 20 Feb, 2010 3 commits
-
-
Vladislav Vaintroub authored
-
Vladislav Vaintroub authored
-
Vladislav Vaintroub authored
-