1. 06 Oct, 2009 1 commit
    • Kristofer Pettersson's avatar
      Bug#47768 pthread_cond_timedwait() is broken on windows · dfed28e7
      Kristofer Pettersson authored
      The pthread_cond_wait implementations for windows might
      dead lock in some rare circumstances.
      
      1) One thread (I) enter a timed wait and at a point in
         time ends up after mutex unlock and before
         WaitForMultipleObjects(...)
      2) Another thread (II) enters pthread_cond_broadcast.
         Grabs the mutex and discovers one waiter. It set
         the broadcast event and closes the broadcast gate
         then unlocks the mutex.
      3) A third thread (III) issues a pthread_cond_signal.
         It grabs the mutex, discovers one waiter, sets the
         signal event then unlock the mutex.
      4) The first threads (I) enters WaitForMultipleObjects
         and finds out that the signal object is in a
         signalled state and exits the wait.
      5) Thread (I) grabs the mutex and checks result status.
         The number of waiters is decreased and becomes equal
         to 0. The event returned was a signal event so the
         broadcast gate isn't opened. The mutex is released.
      6) Thread (II) issues a new broadcast. The mutex is
         acquired but the number of waiters are 0 hence
         the broadcast gate remains closed.
      7) Thread (I) enters the wait again but is blocked by
         the broadcast gate.
      
            This fix resolves the above issue by always resetting
            broadcast gate when there are no more waiters in th queue.
      dfed28e7
  2. 30 Sep, 2009 2 commits
    • Kristofer Pettersson's avatar
      Bug#34895 'show procedure status' or 'show function status' + · f7ebdaef
      Kristofer Pettersson authored
                'flush tables' crashes
      
      The server crashes when 'show procedure status' and 'flush tables' are
      run concurrently.
      
      This is caused by the way mysql.proc table is added twice to the list
      of table to lock although the requirements on the current locking API
      assumes differently.
      
      No test case is submitted because of the nature of the crash which is 
      currently difficult to reproduce in a deterministic way.
      
      This is a backport from 5.1
      f7ebdaef
    • 's avatar
      Bug #46998 mysqlbinlog can't output BEGIN even if the database is included in a transaction · 869c0112
      authored
      The 'BEGIN/COMMIT/ROLLBACK' log event could be filtered out if the
      database is not selected by --database option of mysqlbinlog command.
      This can result in problem if there are some statements in the
      transaction are not filtered out.
      
      To fix the problem, mysqlbinlog will output 'BEGIN/ROLLBACK/COMMIT' 
      in regardless of the database filtering rules.
      869c0112
  3. 29 Sep, 2009 2 commits
  4. 28 Sep, 2009 2 commits
  5. 21 Sep, 2009 1 commit
  6. 18 Sep, 2009 1 commit
    • Georgi Kodinov's avatar
      Bug #47106: Crash / segfault on adding EXPLAIN to a non-crashing · a31f655d
      Georgi Kodinov authored
       query
            
      The fix for bug 46749 removed the check for OUTER_REF_TABLE_BIT 
      and substituted it for a check on the presence of 
      Item_ident::depended_from.
      Removing it altogether was wrong : OUTER_REF_TABLE_BIT should 
      still be checked in addition to depended_from (because it's not 
      set in all cases and doesn't contradict to the check of depended_from).
      Fixed by returning the old condition back as a compliment to the 
      new one.
      a31f655d
  7. 28 Sep, 2009 1 commit
  8. 24 Sep, 2009 1 commit
    • Magnus Blåudd's avatar
      Bug#42850 race condition in my_thr_init.c · 40bd549b
      Magnus Blåudd authored
       - Create the "dummy" thread joinable and wait for it to
         exit before continuing in 'my_thread_global_init'
       - This way we know that the pthread library is initialized
         by one thread only
      40bd549b
  9. 11 Sep, 2009 1 commit
  10. 24 Sep, 2009 1 commit
  11. 18 Sep, 2009 1 commit
  12. 17 Sep, 2009 2 commits
  13. 16 Sep, 2009 1 commit
  14. 10 Sep, 2009 1 commit
    • Sergey Glukhov's avatar
      Bug#46815 CONCAT_WS returning wrong data · 5fbc2904
      Sergey Glukhov authored
      The problem is that argument buffer can be used as result buffer
      and it leads to argument value change.
      The fix is to use 'old buffer' as result buffer only
      if first argument is not constant item.
      5fbc2904
  15. 09 Sep, 2009 2 commits
  16. 08 Sep, 2009 1 commit
  17. 07 Sep, 2009 1 commit
  18. 04 Sep, 2009 3 commits
  19. 03 Sep, 2009 3 commits
    • Satya B's avatar
      Fix for Bug#33785 - myisamchk show warning message · 5a41fb5c
      Satya B authored
      myisamchk tool generates warnings when run on an myisam files (.MYI or .MYD)
      This is because of the conversion of max_value for certain options in myisamchk 
      from singed long to unsigned long
      
      The max value for the options key_buffer_size, read_buffer_size, write_buffer
      _size and sort_buffer_size is given as (long) ~0L which becomes -1  when casted
      from signed long to longlong and then casted to ulonglong. When (ulonglong) -1 
      is compared with maximal value for GET_ULONG data type, we adjust it to 
      (ulonglong) ULONG_MAX and throw the warning.
      
      Fixed by using the right max size.
      
      Max values for the variables (from mysqld.cc)
      ----------------------------
      1. key_buffer_size
         5.0: ULONG_MAX
         5.1: SIZE_T_MAX
         6.0: SIZE_T_MAX
      
      2. read_buffer_size and write_buffer_size
         5.0: INT_MAX32
         5.1: INT_MAX32
         6.0: INT_MAX32
      
      3. sort_buffer_size (aka myisam_sort_buffer_size)
         5.0: UINT_MAX32
         5.1: ULONG_MAX
         6.0: ULONG_MAX
      
      Note: testcase not attached
      5a41fb5c
    • Georgi Kodinov's avatar
      Bug #46791: Assertion failed:(table->key_read==0),function unknown · acc76a97
      Georgi Kodinov authored
        function,file sql_base.cc
      
      When uncacheable queries are written to a temp table the optimizer must 
      preserve the original JOIN structure, because it is re-using the JOIN 
      structure to read from the resulting temporary table.
      This was done only for uncacheable sub-queries. 
      But top level queries can also benefit from this mechanism, specially if 
      they're using index access and need a reset.
      Fixed by not limiting the saving of JOIN structure to subqueries
      exclusively.
      Added a new test file to extend the existing (large) subquery.test.
      acc76a97
    • Satya B's avatar
      Fix for BUG#46591 - .frm file isn't sync'd with sync_frm enabled for · 4a9e7e8e
      Satya B authored
                          CREATE TABLE...LIKE...
            
      The mysql server option 'sync_frm' is ignored when table is created with 
      syntax CREATE TABLE .. LIKE.. 
            
      Fixed by adding the MY_SYNC flag and calling my_sync() from my_copy() when
      the flag is set.
      
      In mysql_create_table(), when the 'sync_frm' is set, MY_SYNC flag is passed 
      to my_copy(). 
            
      Note: TestCase is not attached and can be tested manually using debugger.
      4a9e7e8e
  20. 02 Sep, 2009 5 commits
  21. 31 Aug, 2009 3 commits
  22. 28 Aug, 2009 2 commits
  23. 27 Aug, 2009 2 commits
    • Alfranio Correia's avatar
      BUG#46861 Auto-closing of temporary tables broken by replicate-rewrite-db · fe03c7dc
      Alfranio Correia authored
      When a connection is dropped any remaining temporary table is also automatically
      dropped and the SQL statement of this operation is written to the binary log in
      order to drop such tables on the slave and keep the slave in sync. Specifically,
      the current code base creates the following type of statement:
      DROP /*!40005 TEMPORARY */ TABLE IF EXISTS `db`.`table`;
      
      Unfortunately, appending the database to the table name in this manner circumvents
      the replicate-rewrite-db option (and any options that check the current database).
      To solve the issue, we started writing the statement to the binary as follows:
      use `db`; DROP /*!40005 TEMPORARY */ TABLE IF EXISTS `table`;
      fe03c7dc
    • Georgi Kodinov's avatar
      Bug #46749: Segfault in add_key_fields() with outer subquery level · 8ca8f70d
      Georgi Kodinov authored
        field references
      
      This error requires a combination of factors : 
      1. An "impossible where" in the outermost SELECT
      2. An aggregate in the outermost SELECT
      3. A correlated subquery with a WHERE clause that includes an outer 
      field reference as a top level WHERE sargable predicate
      
      When JOIN::optimize detects an "impossible WHERE" it will bail out
      without doing the rest of the work and initializations. It will not
      call make_join_statistics() as well.  And make_join_statistics fills 
      in various structures for each table referenced.
      When processing the result of the "impossible WHERE" the query must
      send a single row of data if there are aggregate functions in it.
      In this case the server marks all the aggregates as having received 
      no rows and calls the relevant Item::val_xxx() method on the SELECT
      list. However if this SELECT list happens to contain a correlated 
      subquery this subquery is evaluated in a normal evaluation mode.
      And if this correlated subquery has a reference to a field from the 
      outermost "impossible where" SELECT the add_key_fields will mistakenly
      consider the outer field reference as a "local" field reference when 
      looking for sargable predicates.
      But since the SELECT where the outer field reference refers to is not
      completely initialized due to the "impossible WHERE" in this level
      we'll get a NULL pointer reference.
      Fixed by making a better condition for discovering if a field is "local"
      to the SELECT level being processed. 
      It's not enough to look for OUTER_REF_TABLE_BIT in this case since 
      for outer references to constant tables the Item_field::used_tables() 
      will return 0 regardless of whether the field reference is from the 
      local SELECT or not.
      8ca8f70d