1. 17 Feb, 2011 4 commits
    • Vasil Dimov's avatar
      4e8d859e
    • Vasil Dimov's avatar
      Merge mysql-5.1-innodb -> mysql-5.1 · e048944a
      Vasil Dimov authored
      e048944a
    • Magne Mahre's avatar
      Bug#48053 String::c_ptr has a race and/or does an invalid · a03af18e
      Magne Mahre authored
                memory reference
      
      There are two issues present here.
        1) There is a possibility that we test a byte beyond the
           allocated buffer
      
        2) We compare a byte that might never have been
           initalized to see if it's 0.
      
      The first issue is not triggered by existing code, but an
      ASSERT has been added to safe-guard against introducing
      new code that triggers it.
      
      The second issue is what triggers the Valgrind warnings
      reported in the bug report. A buffer is allocated in
      class String to hold the value. This buffer is populated
      by the character data constituting the string, but is not
      zero-terminated in most cases.  Testing if it is indeed
      zero-terminated means that we check a byte that has never
      been explicitly set, thus causing Valgrind to trigger.
      
      Note that issue 2 is not a serious problem.  The variable
      is read, and if it's not zero, we will set it to zero.
      There are no further consequences.
      
      Note that this patch does not fix the underlying problems
      with issue 1, as it is deemed too risky to fix at this
      point (as noted in the bug report).  As discussed in
      the report, the c_ptr() method should probably be
      replaced, but this requires a thorough analysis of the
      ~200 calls to the method.
      
      
      sql/set_var.cc:
        These two cases have been reported to fail
        with Valgrind.
      a03af18e
    • Marko Mäkelä's avatar
  2. 16 Feb, 2011 6 commits
    • Jonathan Perkin's avatar
      Merge to mysql-5.1 · 76b9b687
      Jonathan Perkin authored
      76b9b687
    • Jonathan Perkin's avatar
      Updated README file. · 99207874
      Jonathan Perkin authored
      99207874
    • Bjorn Munch's avatar
      48825330
    • Jon Olav Hauglid's avatar
      Followup to Bug #11752069 (former bug 43152) · 2c2e4846
      Jon Olav Hauglid authored
      Assertion `bitmap_is_set_all(&table->s->all_set)' failed in
      handler::ha_reset
      
      This followup fixes the compilation warning
        'test_bit' may be used uninitialized in this function
      introduced by the previous patch.
      2c2e4846
    • Jon Olav Hauglid's avatar
      Bug #11752069 (former bug 43152) · 5595b201
      Jon Olav Hauglid authored
      Assertion `bitmap_is_set_all(&table->s->all_set)' failed in
      handler::ha_reset
      
      This assertion could be triggered if two connections simultaneously
      executed two bitmap test functions on the same bitmap. For example,
      the assertion could be triggered if one connection executed UPDATE
      while a second connection executed SELECT on the same table.
      
      Even if bitmap test functions have read-only semantics and have
      const bitmaps as parameter, several of them modified the internal
      state of the bitmap. With interleaved execution of two such functions
      it was possible for one function to modify the state of the same
      bitmap that the other function had just modified. This lead to an
      inconsistent state and could trigger the assert.
      
      Internally the bitmap uses 32 bit words for storage. Since bitmaps
      can contain any number of bits, the last word in the bitmap may
      not be fully used. A 32 bit mask is maintained where a bit is set
      if the corresponding bit in the last bitmap word is unused.
      The problem was that several test functions applied this mask to
      the last word. Sometimes the mask was negated and used to zero out
      the remainder of the last word and sometimes the mask was used as-is
      to fill the remainder of the last word with 1's. This meant that if
      a function first used the negated mask and another function then
      used the mask as-is (or vice-versa), the first function would then
      get the wrong result.
      
      This patch fixes the problem by changing the implementation of
      9 bitmap functions that modified the bitmap state even if the 
      bitmap was declared const. These functions now preserve the
      internal state of the bitmap. This makes it possible for
      two connections to concurrently execute two of these functions
      on the same bitmap without issues.
      
      The patch also removes dead testing code from my_bitmap.c.
      These tests have already been moved to unittest/mysys/bitmap-t.c.
      Existing test coverage of my_bitmap has been extended.
      
      No MTR test case added as this would require adding several sync
      points to the bitmap functions. The patch has been tested with
      a non-deterministic test case posted on the bug report.
      
      
      include/my_bit.h:
        Removed my_count_bits_ushort() which is not needed anymore.
        Added my_count_bits_uint32().
      unittest/mysys/bitmap-t.c:
        Extended test coverage of my_bitmap.
      5595b201
    • Marko Mäkelä's avatar
  3. 15 Feb, 2011 3 commits
    • Dmitry Lenev's avatar
      Fix for bug#11766714 (former bug @59888) "debug assertion when · 6d866919
      Dmitry Lenev authored
      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.
      6d866919
    • Marko Mäkelä's avatar
      Add a test for suspected Bug#60049. · 1a0b9247
      Marko Mäkelä authored
      1a0b9247
    • Marko Mäkelä's avatar
      Bug#59307 Valgrind: uninitialized value in rw_lock_set_writer_id_and_recursion_flag() · cf86257e
      Marko Mäkelä authored
      rw_lock_create_func(): Initialize lock->writer_thread, so that Valgrind
      will not complain even when Valgrind instrumentation is not enabled.
      Flag lock->writer_thread uninitialized, so that Valgrind can complain
      when it is used uninitialized.
      
      rw_lock_set_writer_id_and_recursion_flag(): Revert the bogus Valgrind
      instrumentation that was pushed in the first attempt to fix this bug.
      cf86257e
  4. 14 Feb, 2011 1 commit
  5. 11 Feb, 2011 1 commit
  6. 10 Feb, 2011 2 commits
    • Vasil Dimov's avatar
      Fix Bug#59307 Valgrind: uninitialized value in rw_lock_set_writer_id_and_recursion_flag() · 3ed4b640
      Vasil Dimov authored
      by silencing a bogus Valgrind warning:
      
      ==4392== Conditional jump or move depends on uninitialised value(s)
      ==4392==    at 0x5A18416: rw_lock_set_writer_id_and_recursion_flag (sync0rw.ic:283)
      ==4392==    by 0x5A1865C: rw_lock_x_lock_low (sync0rw.c:558)
      ==4392==    by 0x5A18481: rw_lock_x_lock_func (sync0rw.c:617)
      ==4392==    by 0x597EEE6: mtr_x_lock_func (mtr0mtr.ic:271)
      ==4392==    by 0x597EBBD: fsp_header_init (fsp0fsp.c:970)
      ==4392==    by 0x5A15E78: innobase_start_or_create_for_mysql (srv0start.c:1508)
      ==4392==    by 0x598B789: innobase_init(void*) (ha_innodb.cc:2282)
      
      os_compare_and_swap_thread_id() is defined as
      __sync_bool_compare_and_swap(). From the GCC doc:
      
      `bool __sync_bool_compare_and_swap (TYPE *ptr, TYPE oldval TYPE newval, ...)'
        ...
        The "bool" version returns true if the comparison is successful and
        NEWVAL was written.
      
      So it is not possible that the return value is uninitialized, no matter what
      the arguments to os_compare_and_swap_thread_id() are. Probably Valgrind gets
      confused by the implementation of the GCC internal function
      __sync_bool_compare_and_swap().
      3ed4b640
    • Vasil Dimov's avatar
      Increment InnoDB Plugin version from 1.0.15 to 1.0.16. · 7fe25798
      Vasil Dimov authored
      InnoDB Plugin 1.0.15 has been released with MySQL 5.1.55.
      7fe25798
  7. 09 Feb, 2011 5 commits
  8. 08 Feb, 2011 8 commits
    • Vasil Dimov's avatar
      Merge mysql-5.1-innodb -> mysql-5.1 · 04be0aaa
      Vasil Dimov authored
      04be0aaa
    • Georgi Kodinov's avatar
      weave merge of mysql-5.0 to mysql-5.1. · e006cda4
      Georgi Kodinov authored
      e006cda4
    • Jonathan Perkin's avatar
      Merge from mysql-5.0.92-release · f8b73632
      Jonathan Perkin authored
      f8b73632
    • unknown's avatar
      Merge from mysql-5.1.55-release · 2e566bc1
      unknown authored
      2e566bc1
    • Marko Mäkelä's avatar
      Implement UNIV_BLOB_DEBUG. An early version of this caught Bug #55284. · dab6c9b2
      Marko Mäkelä authored
      This option is known to be broken when tablespaces contain off-page
      columns after crash recovery. It has only been tested when creating
      the data files from the scratch.
      
      btr_blob_dbg_t: A map from page_no:heap_no:field_no to first_blob_page_no.
      This map is instantiated for every clustered index in index->blobs.
      It is protected by index->blobs_mutex.
      
      btr_blob_dbg_msg_issue(): Issue a diagnostic message.
      Invoked when btr_blob_dbg_msg is set.
      
      btr_blob_dbg_rbt_insert(): Insert a btr_blob_dbg_t into index->blobs.
      
      btr_blob_dbg_rbt_delete(): Remove a btr_blob_dbg_t from index->blobs.
      
      btr_blob_dbg_cmp(): Comparator for btr_blob_dbg_t.
      
      btr_blob_dbg_add_blob(): Add a BLOB reference to the map.
      
      btr_blob_dbg_add_rec(): Add all BLOB references from a record to the map.
      
      btr_blob_dbg_print(): Display the map of BLOB references in an index.
      
      btr_blob_dbg_remove_rec(): Remove all BLOB references of a record from
      the map.
      
      btr_blob_dbg_is_empty(): Check that no BLOB references exist to or
      from a page. Disowned references from delete-marked records are
      tolerated.
      
      btr_blob_dbg_op(): Perform an operation on all BLOB references on a
      B-tree page.
      
      btr_blob_dbg_add(): Add all BLOB references from a B-tree page to the
      map.
      
      btr_blob_dbg_remove(): Remove all BLOB references from a B-tree page
      from the map.
      
      btr_blob_dbg_restore(): Restore the BLOB references after a failed
      page reorganize.
      
      btr_blob_dbg_set_deleted_flag(): Modify the 'deleted' flag in the BLOB
      references of a record.
      
      btr_blob_dbg_owner(): Own or disown a BLOB reference.
      
      btr_page_create(), btr_page_free_low(): Assert that no BLOB references exist.
      
      btr_create(): Create index->blobs for clustered indexes.
      
      btr_page_reorganize_low(): Invoke btr_blob_dbg_remove() before copying
      the records. Invoke btr_blob_dbg_restore() if the operation fails.
      
      btr_page_empty(), btr_lift_page_up(), btr_compress(), btr_discard_page():
      Invoke btr_blob_dbg_remove().
      
      btr_cur_del_mark_set_clust_rec(): Invoke btr_blob_dbg_set_deleted_flag().
      
      Other cases of modifying the delete mark are either in the secondary
      index or during crash recovery, which we do not promise to support.
      
      btr_cur_set_ownership_of_extern_field(): Invoke btr_blob_dbg_owner().
      
      btr_store_big_rec_extern_fields(): Invoke btr_blob_dbg_add_blob().
      
      btr_free_externally_stored_field(): Invoke btr_blob_dbg_assert_empty()
      on the first BLOB page.
      
      page_cur_insert_rec_low(), page_cur_insert_rec_zip(),
      page_copy_rec_list_end_to_created_page(): Invoke btr_blob_dbg_add_rec().
      
      page_cur_insert_rec_zip_reorg(), page_copy_rec_list_end(),
      page_copy_rec_list_start(): After failure, invoke
      btr_blob_dbg_remove() and btr_blob_dbg_add().
      
      page_cur_delete_rec(): Invoke btr_blob_dbg_remove_rec().
      
      page_delete_rec_list_end(): Invoke btr_blob_dbg_op(btr_blob_dbg_remove_rec).
      
      page_zip_reorganize(): Invoke btr_blob_dbg_remove() before copying the records.
      
      page_zip_copy_recs(): Invoke btr_blob_dbg_add().
      
      row_upd_rec_in_place(): Invoke btr_blob_dbg_rbt_delete() and
      btr_blob_dbg_rbt_insert().
      
      innobase_start_or_create_for_mysql(): Warn when UNIV_BLOB_DEBUG is enabled.
      
      rb://550 approved by Jimmy Yang
      dab6c9b2
    • John H. Embretsen's avatar
      Fix for Bug#59837 - mysqlhotcopy fails with wrong error (11) on specific platforms: · 100018a2
      John H. Embretsen authored
      Test failed on a certain Linux platform in automated environment. It turns out that this platform has an old version of Perl modules DBI and DBD::mysql installed, as well as the OS itself being relatively old.
      Allowing error code 11 to be returned from mysqlhotcopy on expected error seems harmless and will make the test pass also with older libraries.
      100018a2
    • Anitha Gopi's avatar
      Removed the collections for mysql-5.1-bugteam. Removed 1st from weekly. This... · 5fa7fea0
      Anitha Gopi authored
      Removed the collections for mysql-5.1-bugteam. Removed 1st from weekly. This is part of default suites
      
      5fa7fea0
    • Anitha Gopi's avatar
      Removed the collections for mysql-5.1-bugteam. Removed 1st from weekly. This... · d8b345c8
      Anitha Gopi authored
      Removed the collections for mysql-5.1-bugteam. Removed 1st from weekly. This is part of default suites
      
      d8b345c8
  9. 07 Feb, 2011 6 commits
    • Bjorn Munch's avatar
      merge 47141,59979 · 4254d2a5
      Bjorn Munch authored
      4254d2a5
    • Vasil Dimov's avatar
      Backport the fix for Bug#59875 Valgrind warning in buf0buddy.c from 5.5 · b82197c3
      Vasil Dimov authored
      This warning also happens in 5.1 with a slightly different codepath.
      b82197c3
    • Bjorn Munch's avatar
      Bug #59979 Add mtr option to run debug server, but without turning on debug · f88c6516
      Bjorn Munch authored
      Added --debug-server and use $opt_debug_server where appropriate
      Let --debug imply --debug-server
      When merging to 5.5, must adapt fix for 59148
      Oops, set debug => debug-server too late, fixed
      f88c6516
    • Ole John Aske's avatar
      Fix for bug#59308: Incorrect result for SELECT DISTINCT <col>... ORDER BY <col> DESC. · cbe60d3e
      Ole John Aske authored
            
      Also fix bug#59110: Memory leak of QUICK_SELECT_I allocated memory.
      Includes Jørgen Lølands review comments.
            
      Root cause of these bugs are that test_if_skip_sort_order() decided to
      revert the 'skip_sort_order' descision (and use filesort) after the
      query plan has been updated to reflect a 'skip' of the sort order.
            
      This might happen in 'check_reverse_order:' if we have a 
      select->quick which could not be made descending by appending 
      a QUICK_SELECT_DESC. ().
            
      The original 'save_quick' was then restored after the QEP has been modified,
      which caused:
            
        - An incorrect 'precomputed_group_by= TRUE' may have been set, 
          and not reverted, as part of the already modifified QEP (Bug#59308)
        - A 'select->quick' might have been created which we fail to delete (bug#59110).
            
      This fix is a refactorication of test_if_skip_sort_order() where all logic
      related to modification of QEP (controlled by argument 'bool no_changes'), is
      moved to the end of test_if_skip_sort_order(), and done after *all* 'test_if_skip'
      checks has been performed - including the 'check_reverse_order:' checks.
            
      The refactorication above contains now intentional changes to the logic which 
      has been moved to the end of the function.
            
      Furthermore, a smaller part of the fix address the handling of the 
      select->quick objects which may already exists when we call 
      'test_if_skip_sort_order()' (save_quick) -and
      new select->quick's created during test_if_skip_sort_order():
            
        - Before new select->quick may be created by calling ::test_quick_select(), we
          set 'select->quick= 0' to avoid that ::test_quick_select() prematurely
          delete the save_quick's. (After this call we may have both a 'save_quick' 
          and 'select->quick')
            
        - All returns from ::test_if_skip_sort_order() where we may have both a
          'save_quick' and a 'select->quick' has been changed to goto's to the
          exit points 'skiped_sort_order:' or 'need_filesort:' where we
          decide which of the QUICK_SELECT's to keep, and delete the other.
      cbe60d3e
    • Vasil Dimov's avatar
      Use fun:* instead of obj:*/libz.so* because when the bundled zlib is · 919df3f9
      Vasil Dimov authored
      used (--with-zlib-dir=bundled) then there is no libz.so involved.
      919df3f9
    • Vinay Fisrekar's avatar
      Bug#59955 - engines/funcs/ps_string_not_null test needs better cleanup · 59230c89
      Vinay Fisrekar authored
      Correcting clean up command at the start of test.
      59230c89
  10. 05 Feb, 2011 1 commit
    • Dmitry Shulga's avatar
      Fixed bug#57450 - mysql client enter in an infinite loop · a3bd7093
      Dmitry Shulga authored
      if the standard input is a directory.
      
      The problem is that mysql monitor try to read from stdin without
      checking input source type.
      
      The solution is to stop reading data from standard input if a call
      to read(2) failed.
      
      A new test case was added into mysql.test.
      
      client/my_readline.h:
        Data members error and truncated was added to LINE_BUFFER structure.
        These data members used instead of out parameters in functions
        batch_readline, intern_read_line.
      client/mysql.cc:
        read_and_execute() was modified: set status.exit_status to 1
        when the error occured while reading the next command line in
        non-interactive mode. Also the value of the truncated attribute
        of structure LINE_BUFF is taken into account only for non-iteractive mode.
      client/readline.cc:
        intern_read_line() was modified: cancel reading from input if
        fill_buffer() returns -1, e.g. if call to read failed.
        batch_readline was modified: set the error data member of LINE_BUFFER
        structure to value of my_errno when system error happened during call
        to my_read/my_realloc.
      mysql-test/t/mysql.test:
        Test for bug#57450 was added.
      a3bd7093
  11. 04 Feb, 2011 3 commits