1. 09 Jun, 2010 2 commits
    • Sergey Glukhov's avatar
      Bug#38999 valgrind warnings for update statement in function compare_record() · 022e2ef8
      Sergey Glukhov authored
      (InnoDB plugin branch)
      
      mysql-test/suite/innodb_plugin/r/innodb_mysql.result:
        test case
      mysql-test/suite/innodb_plugin/t/innodb_mysql.test:
        test case
      storage/innodb_plugin/row/row0sel.c:
        init null bytes with default values as they might be
        left uninitialized in some cases and these uninited bytes
        might be copied into mysql record buffer that leads to
        valgrind warnings on next use of the buffer.
      022e2ef8
    • Sergey Glukhov's avatar
      Bug#38999 valgrind warnings for update statement in function compare_record() · 60a66c45
      Sergey Glukhov authored
      Valgrind warning happpens because of uninitialized null bytes.
      In row_sel_push_cache_row_for_mysql() function we fill fetch cache
      with necessary field values, row_sel_store_mysql_rec() is called
      for this and leaves null bytes untouched.
      Later row_sel_pop_cached_row_for_mysql() rewrites table record
      buffer with uninited null bytes. We can see the problem from the
      test case:
      At 'SELECT...' we call row_sel_push...->row_sel_store...->row_sel_pop_cached...
      chain which rewrites table->record[0] buffer with uninitialized null bytes.
      When we call 'UPDATE...' statement, compare_record uses this buffer and
      valgrind warning occurs.
      The fix is to init null bytes with default values.
      
      
      mysql-test/suite/innodb/r/innodb_mysql.result:
        test case
      mysql-test/suite/innodb/t/innodb_mysql.test:
        test case
      mysql-test/t/ps_3innodb.test:
        enable valgrind testing
      storage/innobase/row/row0sel.c:
        init null bytes with default values as they might be
        left uninitialized in some cases and these uninited bytes
        might be copied into mysql record buffer that leads to
        valgrind warnings on next use of the buffer.
      60a66c45
  2. 08 Jun, 2010 3 commits
  3. 03 Jun, 2010 5 commits
  4. 02 Jun, 2010 4 commits
    • Marko Mäkelä's avatar
      3ac0b6f2
    • Marko Mäkelä's avatar
      Bug#53674: InnoDB: Error: unlock row could not find a 4 mode lock on the record · c84c4b10
      Marko Mäkelä authored
      In semi-consistent read, only unlock freshly locked non-matching records.
      
      lock_rec_lock_fast(): Return LOCK_REC_SUCCESS,
      LOCK_REC_SUCCESS_CREATED, or LOCK_REC_FAIL instead of TRUE/FALSE.
      
      enum db_err: Add DB_SUCCESS_LOCKED_REC for indicating a successful
      operation where a record lock was created.
      
      lock_sec_rec_read_check_and_lock(),
      lock_clust_rec_read_check_and_lock(), lock_rec_enqueue_waiting(),
      lock_rec_lock_slow(), lock_rec_lock(), row_ins_set_shared_rec_lock(),
      row_ins_set_exclusive_rec_lock(), sel_set_rec_lock(),
      row_sel_get_clust_rec_for_mysql(): Return DB_SUCCESS_LOCKED_REC if a
      new record lock was created. Adjust callers.
      
      row_unlock_for_mysql(): Correct the function documentation.
      
      row_prebuilt_t::new_rec_locks: Correct the documentation.
      c84c4b10
    • Marko Mäkelä's avatar
      Bug#53674: InnoDB: Error: unlock row could not find a 4 mode lock on the record · 306e1338
      Marko Mäkelä authored
      In semi-consistent read, only unlock freshly locked non-matching records.
      
      Define DB_SUCCESS_LOCKED_REC for indicating a successful operation
      where a record lock was created.
      
      lock_rec_lock_fast(): Return LOCK_REC_SUCCESS,
      LOCK_REC_SUCCESS_CREATED, or LOCK_REC_FAIL instead of TRUE/FALSE.
      
      lock_sec_rec_read_check_and_lock(),
      lock_clust_rec_read_check_and_lock(), lock_rec_enqueue_waiting(),
      lock_rec_lock_slow(), lock_rec_lock(), row_ins_set_shared_rec_lock(),
      row_ins_set_exclusive_rec_lock(), sel_set_rec_lock(),
      row_sel_get_clust_rec_for_mysql(): Return DB_SUCCESS_LOCKED_REC if a
      new record lock was created. Adjust callers.
      
      row_unlock_for_mysql(): Correct the function documentation.
      
      row_prebuilt_t::new_rec_locks: Correct the documentation.
      306e1338
    • Marko Mäkelä's avatar
  5. 01 Jun, 2010 5 commits
  6. 31 May, 2010 1 commit
    • Vasil Dimov's avatar
      Merge a change from mysql-trunk-innodb: · da0b6d61
      Vasil Dimov authored
        ------------------------------------------------------------
        revno: 3127
        revision-id: vasil.dimov@oracle.com-20100531152341-x2d4hma644icamh1
        parent: vasil.dimov@oracle.com-20100531105923-kpjwl4rbgfpfj13c
        committer: Vasil Dimov <vasil.dimov@oracle.com>
        branch nick: mysql-trunk-innodb
        timestamp: Mon 2010-05-31 18:23:41 +0300
        message:
          Fix Bug #53947 InnoDB: Assertion failure in thread 4224 in file .\sync\sync0sync.c line 324
          
          Destroy the rw-lock object before freeing the memory it is occupying.
          If we do not do this, then the mutex that is contained in the rw-lock
          object btr_search_latch_temp->mutex gets "freed" and subsequently
          mutex_free() from sync_close() hits a mutex whose memory has been
          freed and crashes.
          
          Approved by:	Heikki (via IRC)
          Discussed with:	Calvin
      da0b6d61
  7. 28 May, 2010 1 commit
  8. 27 May, 2010 1 commit
  9. 26 May, 2010 2 commits
  10. 25 May, 2010 6 commits
  11. 24 May, 2010 2 commits
    • Marko Mäkelä's avatar
      Document the Bug #53578 fix. · 2dcd1ac6
      Marko Mäkelä authored
      2dcd1ac6
    • Marko Mäkelä's avatar
      Bug#53578: assert on invalid page access, in fil_io() · d4fd7bb9
      Marko Mäkelä authored
      Store the max_space_id in the data dictionary header in order to avoid
      space_id reuse.
      
      DICT_HDR_MIX_ID: Renamed to DICT_HDR_MAX_SPACE_ID, DICT_HDR_MIX_ID_LOW.
      
      dict_hdr_get_new_id(): Return table_id, index_id, space_id or a subset of them.
      
      fil_system_t: Add ibool space_id_reuse_warned.
      
      fil_create_new_single_table_tablespace(): Get the space_id from the caller.
      
      fil_space_create(): Issue a warning if the fil_system->max_assigned_id
      is exceeded.
      
      fil_assign_new_space_id(): Return TRUE/FALSE and take a pointer to the
      space_id as a parameter. Make the function public.
      
      fil_init(): Initialize all fil_system fields by mem_zalloc(). Remove
      explicit initializations of certain fields to 0 or NULL.
      d4fd7bb9
  12. 20 May, 2010 7 commits
    • Vasil Dimov's avatar
      f664def4
    • Vasil Dimov's avatar
      Disable main.ps_3innodb for valgrind tests since it results in known · 09438406
      Vasil Dimov authored
      failures, that are described in
      
      Bug#38999 valgrind warnings for update statement in function compare_record()
      
      At the time I am adding this the failures are:
      
      main.ps_3innodb                          [ fail ]  Found warnings/errors in server log file!
              Test ended at 2010-05-20 01:17:34
      line
      ==31559== Thread 11:
      ==31559== Conditional jump or move depends on uninitialised value(s)
      ==31559==    at 0x75C5BD: compare_record(st_table*) (sql_update.cc:35)
      ==31559==    by 0x744732: write_record(THD*, st_table*, st_copy_info*) (sql_insert.cc:1486)
      ==31559==    by 0x74A0D7: mysql_insert(THD*, TABLE_LIST*, List<Item>&, List<List<Item> >&, List<Item>&, List<Item>&, enum_duplicates, bool) (sql_insert.cc:835)
      ==31559==    by 0x6A79B4: mysql_execute_command(THD*) (sql_parse.cc:3198)
      ==31559==    by 0x754998: Prepared_statement::execute(String*, bool) (sql_prepare.cc:3583)
      ==31559==    by 0x754C4F: Prepared_statement::execute_loop(String*, bool, unsigned char*, unsigned char*) (sql_prepare.cc:3258)
      ==31559==    by 0x754F33: mysql_sql_stmt_execute(THD*) (sql_prepare.cc:2529)
      ==31559==    by 0x6A5028: mysql_execute_command(THD*) (sql_parse.cc:2272)
      ==31559==    by 0x6ADAE8: mysql_parse(THD*, char const*, unsigned, char const**) (sql_parse.cc:5986)
      ==31559==    by 0x6AF3A4: dispatch_command(enum_server_command, THD*, char*, unsigned) (sql_parse.cc:1233)
      ==31559==    by 0x6B0800: do_command(THD*) (sql_parse.cc:874)
      ==31559==    by 0x69CB46: handle_one_connection (sql_connect.cc:1134)
      ==31559==    by 0x33EDA062F6: start_thread (in /lib64/libpthread-2.5.so)
      ==31559==    by 0x33ECED1B6C: clone (in /lib64/libc-2.5.so)
      ==31559== Conditional jump or move depends on uninitialised value(s)
      ==31559==    at 0x75C5D0: compare_record(st_table*) (sql_update.cc:35)
      ==31559==    by 0x744732: write_record(THD*, st_table*, st_copy_info*) (sql_insert.cc:1486)
      ==31559==    by 0x74A0D7: mysql_insert(THD*, TABLE_LIST*, List<Item>&, List<List<Item> >&, List<Item>&, List<Item>&, enum_duplicates, bool) (sql_insert.cc:835)
      ==31559==    by 0x6A79B4: mysql_execute_command(THD*) (sql_parse.cc:3198)
      ==31559==    by 0x754998: Prepared_statement::execute(String*, bool) (sql_prepare.cc:3583)
      ==31559==    by 0x754C4F: Prepared_statement::execute_loop(String*, bool, unsigned char*, unsigned char*) (sql_prepare.cc:3258)
      ==31559==    by 0x754F33: mysql_sql_stmt_execute(THD*) (sql_prepare.cc:2529)
      ==31559==    by 0x6A5028: mysql_execute_command(THD*) (sql_parse.cc:2272)
      ==31559==    by 0x6ADAE8: mysql_parse(THD*, char const*, unsigned, char const**) (sql_parse.cc:5986)
      ==31559==    by 0x6AF3A4: dispatch_command(enum_server_command, THD*, char*, unsigned) (sql_parse.cc:1233)
      ==31559==    by 0x6B0800: do_command(THD*) (sql_parse.cc:874)
      ==31559==    by 0x69CB46: handle_one_connection (sql_connect.cc:1134)
      ==31559==    by 0x33EDA062F6: start_thread (in /lib64/libpthread-2.5.so)
      ==31559==    by 0x33ECED1B6C: clone (in /lib64/libc-2.5.so)
      ^ Found warnings in /export/home4/pb2/test/sb_3-1827397-1274300957.87/mysql-5.1.48-linux-x86_64-test/mysql-test/var-n_mix/log/mysqld.1.err
      09438406
    • Marko Mäkelä's avatar
      a426d6f9
    • Vasil Dimov's avatar
      8ae42ceb
    • Marko Mäkelä's avatar
      Bug#53593: Add some instrumentation to improve Valgrind sensitivity · 98406ba4
      Marko Mäkelä authored
      BUILD/*: Add valgrind_configs=--with-valgrind.
      BUILD/*: Remove -USAFEMALLOC from valgrind_flags.
      
      configure.in: Add AC_ARG_WITH(valgrind) and HAVE_VALGRIND.
      
      include/my_sys.h: Define a number of MEM_ wrappers for VALGRIND_ functions.
      include/my_sys.h: Make TRASH do MEM_UNDEFINED().
      
      include/m_string.h: Remove unused macro bzero_if_purify(A,B).
      
      _mymalloc(): Declare MEM_UNDEFINED() on the allocated memory.
      
      _myfree(): Declare MEM_NOACCESS() on the freed memory.
      
      storage/innobase/include/univ.i: Enable UNIV_DEBUG_VALGRIND based on
      HAVE_VALGRIND rather than HAVE_purify.
      
      Possible things to do:
       * In my_global.h, remove the defined(HAVE_purify) condition
         from the _WIN32 uint3korr().
       * In my_global.h *int*korr(), use | instead of +
         in order to keep the Valgrind V bits accurate
       * Consider replacing HAVE_purify with HAVE_VALGRIND
       * Use VALGRIND_CREATE_BLOCK, VALGRIND_DISCARD in mem_root and similar places
      98406ba4
    • Vasil Dimov's avatar
      Merge from mysql-trunk-innodb into mysql-5.1-innodb/storage/innodb_plugin: · 56586334
      Vasil Dimov authored
        ------------------------------------------------------------
        revno: 3094
        revision-id: vasil.dimov@oracle.com-20100513074652-0cvlhgkesgbb2bfh
        parent: vasil.dimov@oracle.com-20100512173700-byf8xntxjur1hqov
        committer: Vasil Dimov <vasil.dimov@oracle.com>
        branch nick: mysql-trunk-innodb
        timestamp: Thu 2010-05-13 10:46:52 +0300
        message:
          Followup to Bug#51920, fix binlog.binlog_killed
          
          This is a followup to the fix of
          
          Bug#51920 Innodb connections in row lock wait ignore KILL until lock wait
          timeout
          
          in that fix (rb://279) the behavior was changed to honor when a trx is
          interrupted during lock wait, but the returned error code was still
          "lock wait timeout" when it should be "interrupted".
          
          This change fixes the non-deterministically failing test binlog.binlog_killed,
          that failed like this:
          
          binlog.binlog_killed 'stmt'              [ fail ]
                  Test ended at 2010-05-12 11:39:08
          
          CURRENT_TEST: binlog.binlog_killed
          mysqltest: At line 208: query 'reap' failed with wrong errno 1205: 'Lock wait timeout exceeded; try restarting transaction', instead of 0...
          
          Approved by:	Sunny Bains (rb://344)
        ------------------------------------------------------------
      56586334
    • Vasil Dimov's avatar
      Merge from mysql-trunk-innodb into mysql-5.1-innodb/storage/innobase: · 094a1f1e
      Vasil Dimov authored
        ------------------------------------------------------------
        revno: 3094
        revision-id: vasil.dimov@oracle.com-20100513074652-0cvlhgkesgbb2bfh
        parent: vasil.dimov@oracle.com-20100512173700-byf8xntxjur1hqov
        committer: Vasil Dimov <vasil.dimov@oracle.com>
        branch nick: mysql-trunk-innodb
        timestamp: Thu 2010-05-13 10:46:52 +0300
        message:
          Followup to Bug#51920, fix binlog.binlog_killed
          
          This is a followup to the fix of
          
          Bug#51920 Innodb connections in row lock wait ignore KILL until lock wait
          timeout
          
          in that fix (rb://279) the behavior was changed to honor when a trx is
          interrupted during lock wait, but the returned error code was still
          "lock wait timeout" when it should be "interrupted".
          
          This change fixes the non-deterministically failing test binlog.binlog_killed,
          that failed like this:
          
          binlog.binlog_killed 'stmt'              [ fail ]
                  Test ended at 2010-05-12 11:39:08
          
          CURRENT_TEST: binlog.binlog_killed
          mysqltest: At line 208: query 'reap' failed with wrong errno 1205: 'Lock wait timeout exceeded; try restarting transaction', instead of 0...
          
          Approved by:	Sunny Bains (rb://344)
        ------------------------------------------------------------
      
      This merge is non-trivial since it has to introduce the DB_INTERRUPTED
      error code.
      
      Also revert vasil.dimov@oracle.com-20100408165555-9rpjh24o0sa9ad5y
      which adjusted the binlog.binlog_killed test to the new (wrong) behavior
      094a1f1e
  13. 19 May, 2010 1 commit