1. 01 Oct, 2024 5 commits
    • Marko Mäkelä's avatar
      MDEV-35053 Crash in purge_sys_t::iterator::free_history_rseg() · a298dfb8
      Marko Mäkelä authored
      purge_sys_t::get_page(): Avoid accessing a freed reference to pages[id]
      after pages.erase(id).  This heap-use-after-free would sometimes be
      caught by AddressSanitizer.
      
      purge_sys_t::iterator::free_history_rseg(): Do not crash if undo=nullptr
      (the database is corrupted).
      
      Reviewed by: Debarun Banerjee
      a298dfb8
    • Marko Mäkelä's avatar
      MDEV-34973 fixup for POWER,s390x · 2d031f4a
      Marko Mäkelä authored
      xtest(): Correct the declaration.
      2d031f4a
    • Rucha Deodhar's avatar
      MDEV-27412: JSON_TABLE doesn't properly unquote strings · 753e7d6d
      Rucha Deodhar authored
      Analysis:
      The value gets appended as string instead of unescaped json value
      
      Fix:
      Append the value of json in a temporary string and then store it in the
      field instead of directly storing as string.
      753e7d6d
    • Max Kellermann's avatar
      MDEV-34973: innobase/dict0dict: add `noexcept` to lock/unlock methods · 6715e4df
      Max Kellermann authored
      Another chance for cutting back overhead due to C++ exceptions being
      enabled; the `dict_sys_t` class is a good candidate because its
      locking methods are called frequently.
      
      Binary size reduction this time:
      
          text	  data	   bss	   dec	   hex	filename
       24448622	2436488	9473537	36358647	22ac9f7	build/release/sql/mariadbd
       24448474	2436488	9473601	36358563	22ac9a3	build/release/sql/mariadbd
      6715e4df
    • Max Kellermann's avatar
      MDEV-34973: innobase/lock0lock: add `noexcept` · 813123e3
      Max Kellermann authored
      MariaDB is compiled with C++ exceptions enabled, and that disallows
      some optimizations (e.g. the stack must always be unwinding-safe).  By
      adding `noexcept` to functions that are guaranteed to never throw,
      some of these optimizations can be regained.  Low-level locking
      functions that are called often are a good candidate for this.
      
      This shrinks the executable a bit (tested with GCC 14 on aarch64):
      
          text	  data	   bss	   dec	   hex	filename
       24448910	2436488	9473185	36358583	22ac9b7	build/release/sql/mariadbd
       24448622	2436488	9473537	36358647	22ac9f7	build/release/sql/mariadbd
      813123e3
  2. 30 Sep, 2024 2 commits
  3. 27 Sep, 2024 2 commits
  4. 24 Sep, 2024 1 commit
    • Denis Protivensky's avatar
      MDEV-34836: TOI on parent table must BF abort SR in progress on a child · 231900e5
      Denis Protivensky authored
      Applied SR transaction on the child table was not BF aborted by TOI running
      on the parent table for several reasons:
      
      Although SR correctly collected FK-referenced keys to parent, TOI in Galera
      disregards common certification index and simply sets itself to depend on
      the latest certified write set seqno.
      
      Since this write set was the fragment of SR transaction, TOI was allowed to
      run in parallel with SR presuming it would BF abort the latter.
      
      At the same time, DML transactions in the server don't grab MDL locks on
      FK-referenced tables, thus parent table wasn't protected by an MDL lock from
      SR and it couldn't provoke MDL lock conflict for TOI to BF abort SR transaction.
      
      In InnoDB, DDL transactions grab shared MDL locks on child tables, which is not
      enough to trigger MDL conflict in Galera.
      
      InnoDB-level Wsrep patch didn't contain correct conflict resolution logic due to
      the fact that it was believed MDL locking should always produce conflicts correctly.
      
      The fix brings conflict resolution rules similar to MDL-level checks to InnoDB,
      thus accounting for the problematic case.
      
      Apart from that, wsrep_thd_is_SR() is patched to return true only for executing
      SR transactions. It should be safe as any other SR state is either the same as
      for any single write set (thus making the two logically equivalent), or it reflects
      an SR transaction as being aborting or prepared, which is handled separately in
      BF-aborting logic, and for regular execution path it should not matter at all.
      Signed-off-by: default avatarJulius Goryavsky <julius.goryavsky@mariadb.com>
      231900e5
  5. 23 Sep, 2024 2 commits
    • Marko Mäkelä's avatar
      MDEV-34983: Remove x86 asm from InnoDB · 638c62ac
      Marko Mäkelä authored
      Starting with GCC 7 and clang 15, single-bit operations such as
      fetch_or(1) & 1 are translated into 80386 instructions such as
      LOCK BTS, instead of using the generic translation pattern
      of emitting a loop around LOCK CMPXCHG.
      
      Given that the oldest currently supported GNU/Linux distributions
      ship GCC 7, and that older versions of GCC are out of support,
      let us remove some work-arounds that are not strictly necessary.
      If someone compiles the code using an older compiler, it will work
      but possibly less efficiently.
      
      srw_mutex_impl::HOLDER: Changed from 1U<<31 to 1 in order to
      work around https://github.com/llvm/llvm-project/issues/37322
      which is specific to setting the most significant bit.
      
      srw_mutex_impl::WAITER: A multiplier of waiting requests.
      This used to be 1, which would now collide with HOLDER.
      
      fil_space_t::set_stopping(): Remove this unused function.
      
      In MSVC we need _interlockedbittestandset() for LOCK BTS.
      638c62ac
    • Lena Startseva's avatar
  6. 20 Sep, 2024 2 commits
  7. 16 Sep, 2024 2 commits
  8. 15 Sep, 2024 12 commits
  9. 14 Sep, 2024 1 commit
    • Marko Mäkelä's avatar
      mtr_t::log_file_op(): Fix -Wnonnull · 4010dff0
      Marko Mäkelä authored
      GCC 12.2.0 could issue -Wnonnull for an unreachable call to
      strlen(new_path).  Let us prevent that by replacing the condition
      (type == FILE_RENAME) with the equivalent (new_path).
      This should also optimize the generated code, because the life time
      of the parameter "type" will be reduced.
      4010dff0
  10. 13 Sep, 2024 1 commit
    • Marko Mäkelä's avatar
      MDEV-34921 MemorySanitizer reports errors for non-debug builds · b331cde2
      Marko Mäkelä authored
      my_b_encr_write(): Initialize also block_length, and at the same time
      last_block_length, so that all 128 bits can be initialized with fewer
      writes. This fixes an error that was caught in the test
      encryption.tempfiles_encrypted.
      
      test_my_safe_print_str(): Skip a test that would attempt to
      display uninitialized data in the test unit.stacktrace.
      Previously, our CI did not build unit tests with MemorySanitizer.
      
      handle_delayed_insert(): Remove a redundant call to pthread_exit(0),
      which would for some reason cause MemorySanitizer in clang-19 to
      report a stack overflow in a RelWithDebInfo build. This fixes a
      failure of several tests.
      
      Reviewed by: Vladislav Vaintroub
      b331cde2
  11. 12 Sep, 2024 5 commits
  12. 11 Sep, 2024 5 commits