mariadb/storage/innobase/ut/ut0mem.c
unknown 0da158aa2f Applied InnoDB 5.1 snapshot ss787.
Bugs fixed:
- Bug #20791    valgrind errors in InnoDB
  Remove Valgrind warning of Bug #20791 : in new database
  creation, we read the doublewrite buffer magic number from
  uninitialized memory; the code worked because it was extremely
  unlikely that the memory would contain the magic number
- Bug #21784    DROP TABLE crashes 5.1.12-pre if concurrent
  queries on the table
  remove update_thd() in ::store_lock()


Also includes numerous coding style fixes, etc.  See file-level
comments for details.


sql/ha_innodb.cc:
  Applied InnoDB 5.1 snapshot ss787.
  
    r755:
    Merge a patch from MySQL AB (Mats Kindal):
  
    Lock and unlock prepare_commit_mutex under the same conditions.
  
    r782:
    Fix bug #21784 of a crash in DROP TABLE with concurrent queries on the table
storage/innobase/Makefile.am:
  Applied InnoDB 5.1 snapshot ss787.
  
    r772:
    Merge changes from MySQL AB:
  
    ChangeSet
      2006/08/23 13:59:16-07:00 brian@zim.(none)
      This patch removes need for a innodb to have its own configure.
storage/innobase/btr/btr0btr.c:
  Applied InnoDB 5.1 snapshot ss787.
  
    r763:
    Reindent the code base (except for ha_innodb.{cc,h} and generated parser
    and lexer files).
  
    r764:
    Split lines before an opening parenthesis, not after one.
  
    Replace some printf(...) in debug builds with fprintf(stderr, ...).
  
    r765:
    Split lines before binary operators, not after them.
storage/innobase/btr/btr0cur.c:
  Applied InnoDB 5.1 snapshot ss787.
  
    r761:
    btr_cur_search_to_nth_level(): Document where cursor is left at in
    PAGE_CUR_LE searches.
  
    r763:
    Reindent the code base (except for ha_innodb.{cc,h} and generated parser
    and lexer files).
  
    r765:
    Split lines before binary operators, not after them.
storage/innobase/btr/btr0pcur.c:
  Applied InnoDB 5.1 snapshot ss787.
  
    r763:
    Reindent the code base (except for ha_innodb.{cc,h} and generated parser
    and lexer files).
  
    r765:
    Split lines before binary operators, not after them.
storage/innobase/btr/btr0sea.c:
  Applied InnoDB 5.1 snapshot ss787.
  
    r763:
    Reindent the code base (except for ha_innodb.{cc,h} and generated parser
    and lexer files).
storage/innobase/buf/buf0buf.c:
  Applied InnoDB 5.1 snapshot ss787.
  
    r763:
    Reindent the code base (except for ha_innodb.{cc,h} and generated parser
    and lexer files).
  
    r764:
    Split lines before an opening parenthesis, not after one.
  
    Replace some printf(...) in debug builds with fprintf(stderr, ...).
  
    r765:
    Split lines before binary operators, not after them.
storage/innobase/buf/buf0flu.c:
  Applied InnoDB 5.1 snapshot ss787.
  
    r763:
    Reindent the code base (except for ha_innodb.{cc,h} and generated parser
    and lexer files).
  
    r764:
    Split lines before an opening parenthesis, not after one.
  
    Replace some printf(...) in debug builds with fprintf(stderr, ...).
  
    r765:
    Split lines before binary operators, not after them.
storage/innobase/buf/buf0lru.c:
  Applied InnoDB 5.1 snapshot ss787.
  
    r763:
    Reindent the code base (except for ha_innodb.{cc,h} and generated parser
    and lexer files).
  
    r764:
    Split lines before an opening parenthesis, not after one.
  
    Replace some printf(...) in debug builds with fprintf(stderr, ...).
storage/innobase/buf/buf0rea.c:
  Applied InnoDB 5.1 snapshot ss787.
  
    r763:
    Reindent the code base (except for ha_innodb.{cc,h} and generated parser
    and lexer files).
  
    r765:
    Split lines before binary operators, not after them.
storage/innobase/data/data0data.c:
  Applied InnoDB 5.1 snapshot ss787.
  
    r743:
    dfield_print_raw(): Make static.  Print at most 1000 bytes to avoid
    excessive space usage of the error log.
  
    r763:
    Reindent the code base (except for ha_innodb.{cc,h} and generated parser
    and lexer files).
  
    r765:
    Split lines before binary operators, not after them.
storage/innobase/data/data0type.c:
  Applied InnoDB 5.1 snapshot ss787.
  
    r763:
    Reindent the code base (except for ha_innodb.{cc,h} and generated parser
    and lexer files).
storage/innobase/dict/dict0boot.c:
  Applied InnoDB 5.1 snapshot ss787.
  
    r763:
    Reindent the code base (except for ha_innodb.{cc,h} and generated parser
    and lexer files).
storage/innobase/dict/dict0crea.c:
  Applied InnoDB 5.1 snapshot ss787.
  
    r763:
    Reindent the code base (except for ha_innodb.{cc,h} and generated parser
    and lexer files).
storage/innobase/dict/dict0dict.c:
  Applied InnoDB 5.1 snapshot ss787.
  
    r763:
    Reindent the code base (except for ha_innodb.{cc,h} and generated parser
    and lexer files).
  
    r764:
    Split lines before an opening parenthesis, not after one.
  
    Replace some printf(...) in debug builds with fprintf(stderr, ...).
  
    r765:
    Split lines before binary operators, not after them.
  
    r767:
    Remove dict_col_t::aux, which was only used when copying an index definition
    to the data dictionary cache.
storage/innobase/dict/dict0load.c:
  Applied InnoDB 5.1 snapshot ss787.
  
    r763:
    Reindent the code base (except for ha_innodb.{cc,h} and generated parser
    and lexer files).
  
    r765:
    Split lines before binary operators, not after them.
storage/innobase/dict/dict0mem.c:
  Applied InnoDB 5.1 snapshot ss787.
  
    r763:
    Reindent the code base (except for ha_innodb.{cc,h} and generated parser
    and lexer files).
storage/innobase/eval/eval0eval.c:
  Applied InnoDB 5.1 snapshot ss787.
  
    r763:
    Reindent the code base (except for ha_innodb.{cc,h} and generated parser
    and lexer files).
  
    r765:
    Split lines before binary operators, not after them.
storage/innobase/eval/eval0proc.c:
  Applied InnoDB 5.1 snapshot ss787.
  
    r763:
    Reindent the code base (except for ha_innodb.{cc,h} and generated parser
    and lexer files).
storage/innobase/fil/fil0fil.c:
  Applied InnoDB 5.1 snapshot ss787.
  
    r763:
    Reindent the code base (except for ha_innodb.{cc,h} and generated parser
    and lexer files).
  
    r764:
    Split lines before an opening parenthesis, not after one.
  
    Replace some printf(...) in debug builds with fprintf(stderr, ...).
  
    r765:
    Split lines before binary operators, not after them.
storage/innobase/fsp/fsp0fsp.c:
  Applied InnoDB 5.1 snapshot ss787.
  
    r763:
    Reindent the code base (except for ha_innodb.{cc,h} and generated parser
    and lexer files).
  
    r764:
    Split lines before an opening parenthesis, not after one.
  
    Replace some printf(...) in debug builds with fprintf(stderr, ...).
  
    r765:
    Split lines before binary operators, not after them.
storage/innobase/fut/fut0lst.c:
  Applied InnoDB 5.1 snapshot ss787.
  
    r763:
    Reindent the code base (except for ha_innodb.{cc,h} and generated parser
    and lexer files).
storage/innobase/ha/ha0ha.c:
  Applied InnoDB 5.1 snapshot ss787.
  
    r763:
    Reindent the code base (except for ha_innodb.{cc,h} and generated parser
    and lexer files).
storage/innobase/ibuf/ibuf0ibuf.c:
  Applied InnoDB 5.1 snapshot ss787.
  
    r735:
    Remove all traces of the obsolete concept of replicate spaces.
  
    r763:
    Reindent the code base (except for ha_innodb.{cc,h} and generated parser
    and lexer files).
  
    r764:
    Split lines before an opening parenthesis, not after one.
  
    Replace some printf(...) in debug builds with fprintf(stderr, ...).
  
    r765:
    Split lines before binary operators, not after them.
storage/innobase/include/btr0btr.ic:
  Applied InnoDB 5.1 snapshot ss787.
  
    r763:
    Reindent the code base (except for ha_innodb.{cc,h} and generated parser
    and lexer files).
storage/innobase/include/btr0cur.h:
  Applied InnoDB 5.1 snapshot ss787.
  
    r763:
    Reindent the code base (except for ha_innodb.{cc,h} and generated parser
    and lexer files).
storage/innobase/include/btr0cur.ic:
  Applied InnoDB 5.1 snapshot ss787.
  
    r763:
    Reindent the code base (except for ha_innodb.{cc,h} and generated parser
    and lexer files).
storage/innobase/include/btr0pcur.ic:
  Applied InnoDB 5.1 snapshot ss787.
  
    r763:
    Reindent the code base (except for ha_innodb.{cc,h} and generated parser
    and lexer files).
storage/innobase/include/buf0buf.h:
  Applied InnoDB 5.1 snapshot ss787.
  
    r763:
    Reindent the code base (except for ha_innodb.{cc,h} and generated parser
    and lexer files).
storage/innobase/include/buf0buf.ic:
  Applied InnoDB 5.1 snapshot ss787.
  
    r763:
    Reindent the code base (except for ha_innodb.{cc,h} and generated parser
    and lexer files).
storage/innobase/include/buf0flu.ic:
  Applied InnoDB 5.1 snapshot ss787.
  
    r763:
    Reindent the code base (except for ha_innodb.{cc,h} and generated parser
    and lexer files).
storage/innobase/include/buf0rea.h:
  Applied InnoDB 5.1 snapshot ss787.
  
    r763:
    Reindent the code base (except for ha_innodb.{cc,h} and generated parser
    and lexer files).
storage/innobase/include/data0data.h:
  Applied InnoDB 5.1 snapshot ss787.
  
    r743:
    dfield_print_raw(): Make static.  Print at most 1000 bytes to avoid
    excessive space usage of the error log.
storage/innobase/include/data0data.ic:
  Applied InnoDB 5.1 snapshot ss787.
  
    r763:
    Reindent the code base (except for ha_innodb.{cc,h} and generated parser
    and lexer files).
storage/innobase/include/data0type.ic:
  Applied InnoDB 5.1 snapshot ss787.
  
    r763:
    Reindent the code base (except for ha_innodb.{cc,h} and generated parser
    and lexer files).
storage/innobase/include/dict0boot.h:
  Applied InnoDB 5.1 snapshot ss787.
  
    r763:
    Reindent the code base (except for ha_innodb.{cc,h} and generated parser
    and lexer files).
storage/innobase/include/dict0dict.ic:
  Applied InnoDB 5.1 snapshot ss787.
  
    r763:
    Reindent the code base (except for ha_innodb.{cc,h} and generated parser
    and lexer files).
storage/innobase/include/dict0mem.h:
  Applied InnoDB 5.1 snapshot ss787.
  
    r767:
    Remove dict_col_t::aux, which was only used when copying an index definition
    to the data dictionary cache.
storage/innobase/include/eval0eval.ic:
  Applied InnoDB 5.1 snapshot ss787.
  
    r763:
    Reindent the code base (except for ha_innodb.{cc,h} and generated parser
    and lexer files).
storage/innobase/include/fut0lst.ic:
  Applied InnoDB 5.1 snapshot ss787.
  
    r763:
    Reindent the code base (except for ha_innodb.{cc,h} and generated parser
    and lexer files).
storage/innobase/include/ibuf0ibuf.ic:
  Applied InnoDB 5.1 snapshot ss787.
  
    r763:
    Reindent the code base (except for ha_innodb.{cc,h} and generated parser
    and lexer files).
storage/innobase/include/lock0lock.ic:
  Applied InnoDB 5.1 snapshot ss787.
  
    r763:
    Reindent the code base (except for ha_innodb.{cc,h} and generated parser
    and lexer files).
storage/innobase/include/log0log.ic:
  Applied InnoDB 5.1 snapshot ss787.
  
    r763:
    Reindent the code base (except for ha_innodb.{cc,h} and generated parser
    and lexer files).
storage/innobase/include/log0recv.h:
  Applied InnoDB 5.1 snapshot ss787.
  
    r735:
    Remove all traces of the obsolete concept of replicate spaces.
storage/innobase/include/mach0data.ic:
  Applied InnoDB 5.1 snapshot ss787.
  
    r763:
    Reindent the code base (except for ha_innodb.{cc,h} and generated parser
    and lexer files).
storage/innobase/include/mem0mem.ic:
  Applied InnoDB 5.1 snapshot ss787.
  
    r763:
    Reindent the code base (except for ha_innodb.{cc,h} and generated parser
    and lexer files).
  
    r765:
    Split lines before binary operators, not after them.
storage/innobase/include/mtr0log.ic:
  Applied InnoDB 5.1 snapshot ss787.
  
    r763:
    Reindent the code base (except for ha_innodb.{cc,h} and generated parser
    and lexer files).
storage/innobase/include/mtr0mtr.h:
  Applied InnoDB 5.1 snapshot ss787.
  
    r763:
    Reindent the code base (except for ha_innodb.{cc,h} and generated parser
    and lexer files).
storage/innobase/include/os0file.h:
  Applied InnoDB 5.1 snapshot ss787.
  
    r763:
    Reindent the code base (except for ha_innodb.{cc,h} and generated parser
    and lexer files).
storage/innobase/include/page0cur.ic:
  Applied InnoDB 5.1 snapshot ss787.
  
    r763:
    Reindent the code base (except for ha_innodb.{cc,h} and generated parser
    and lexer files).
storage/innobase/include/page0page.ic:
  Applied InnoDB 5.1 snapshot ss787.
  
    r763:
    Reindent the code base (except for ha_innodb.{cc,h} and generated parser
    and lexer files).
  
    r764:
    Split lines before an opening parenthesis, not after one.
  
    Replace some printf(...) in debug builds with fprintf(stderr, ...).
storage/innobase/include/que0que.ic:
  Applied InnoDB 5.1 snapshot ss787.
  
    r763:
    Reindent the code base (except for ha_innodb.{cc,h} and generated parser
    and lexer files).
storage/innobase/include/read0read.ic:
  Applied InnoDB 5.1 snapshot ss787.
  
    r763:
    Reindent the code base (except for ha_innodb.{cc,h} and generated parser
    and lexer files).
storage/innobase/include/rem0cmp.ic:
  Applied InnoDB 5.1 snapshot ss787.
  
    r763:
    Reindent the code base (except for ha_innodb.{cc,h} and generated parser
    and lexer files).
storage/innobase/include/rem0rec.ic:
  Applied InnoDB 5.1 snapshot ss787.
  
    r763:
    Reindent the code base (except for ha_innodb.{cc,h} and generated parser
    and lexer files).
  
    r765:
    Split lines before binary operators, not after them.
storage/innobase/include/row0mysql.h:
  Applied InnoDB 5.1 snapshot ss787.
  
    r763:
    Reindent the code base (except for ha_innodb.{cc,h} and generated parser
    and lexer files).
storage/innobase/include/row0purge.h:
  Applied InnoDB 5.1 snapshot ss787.
  
    r763:
    Reindent the code base (except for ha_innodb.{cc,h} and generated parser
    and lexer files).
storage/innobase/include/row0row.h:
  Applied InnoDB 5.1 snapshot ss787.
  
    r777:
    Remove unused code.
  
    row_build(): Remove type==ROW_COPY_ALSO_EXTERNALS, because it is never
    passed.
storage/innobase/include/row0row.ic:
  Applied InnoDB 5.1 snapshot ss787.
  
    r763:
    Reindent the code base (except for ha_innodb.{cc,h} and generated parser
    and lexer files).
storage/innobase/include/row0sel.h:
  Applied InnoDB 5.1 snapshot ss787.
  
    r763:
    Reindent the code base (except for ha_innodb.{cc,h} and generated parser
    and lexer files).
storage/innobase/include/row0sel.ic:
  Applied InnoDB 5.1 snapshot ss787.
  
    r763:
    Reindent the code base (except for ha_innodb.{cc,h} and generated parser
    and lexer files).
storage/innobase/include/row0undo.h:
  Applied InnoDB 5.1 snapshot ss787.
  
    r763:
    Reindent the code base (except for ha_innodb.{cc,h} and generated parser
    and lexer files).
storage/innobase/include/row0upd.ic:
  Applied InnoDB 5.1 snapshot ss787.
  
    r763:
    Reindent the code base (except for ha_innodb.{cc,h} and generated parser
    and lexer files).
storage/innobase/include/sync0rw.h:
  Applied InnoDB 5.1 snapshot ss787.
  
    r763:
    Reindent the code base (except for ha_innodb.{cc,h} and generated parser
    and lexer files).
storage/innobase/include/sync0rw.ic:
  Applied InnoDB 5.1 snapshot ss787.
  
    r763:
    Reindent the code base (except for ha_innodb.{cc,h} and generated parser
    and lexer files).
storage/innobase/include/sync0sync.h:
  Applied InnoDB 5.1 snapshot ss787.
  
    r763:
    Reindent the code base (except for ha_innodb.{cc,h} and generated parser
    and lexer files).
storage/innobase/include/sync0sync.ic:
  Applied InnoDB 5.1 snapshot ss787.
  
    r763:
    Reindent the code base (except for ha_innodb.{cc,h} and generated parser
    and lexer files).
storage/innobase/include/trx0rec.ic:
  Applied InnoDB 5.1 snapshot ss787.
  
    r763:
    Reindent the code base (except for ha_innodb.{cc,h} and generated parser
    and lexer files).
storage/innobase/include/trx0rseg.ic:
  Applied InnoDB 5.1 snapshot ss787.
  
    r763:
    Reindent the code base (except for ha_innodb.{cc,h} and generated parser
    and lexer files).
  
    r765:
    Split lines before binary operators, not after them.
storage/innobase/include/trx0sys.ic:
  Applied InnoDB 5.1 snapshot ss787.
  
    r763:
    Reindent the code base (except for ha_innodb.{cc,h} and generated parser
    and lexer files).
  
    r765:
    Split lines before binary operators, not after them.
storage/innobase/include/trx0trx.h:
  Applied InnoDB 5.1 snapshot ss787.
  
    r763:
    Reindent the code base (except for ha_innodb.{cc,h} and generated parser
    and lexer files).
storage/innobase/include/trx0trx.ic:
  Applied InnoDB 5.1 snapshot ss787.
  
    r763:
    Reindent the code base (except for ha_innodb.{cc,h} and generated parser
    and lexer files).
storage/innobase/include/trx0undo.h:
  Applied InnoDB 5.1 snapshot ss787.
  
    r763:
    Reindent the code base (except for ha_innodb.{cc,h} and generated parser
    and lexer files).
storage/innobase/include/trx0undo.ic:
  Applied InnoDB 5.1 snapshot ss787.
  
    r763:
    Reindent the code base (except for ha_innodb.{cc,h} and generated parser
    and lexer files).
storage/innobase/include/trx0xa.h:
  Applied InnoDB 5.1 snapshot ss787.
  
    r763:
    Reindent the code base (except for ha_innodb.{cc,h} and generated parser
    and lexer files).
storage/innobase/include/univ.i:
  Applied InnoDB 5.1 snapshot ss787.
  
    r772:
    Merge changes from MySQL AB:
  
    ChangeSet
      2006/08/23 13:59:16-07:00 brian@zim.(none)·
      This patch removes need for a innodb to have its own configure.·
  
    univ.i: Replace ../ib_config.h with config.h.
  
    r777:
    Remove unused code.
  
    univ.i: Do not #define YYDEBUG, because it is only useful for debugging
    the grammar of the Bison-generated InnoDB SQL parser.
storage/innobase/include/ut0byte.ic:
  Applied InnoDB 5.1 snapshot ss787.
  
    r763:
    Reindent the code base (except for ha_innodb.{cc,h} and generated parser
    and lexer files).
storage/innobase/include/ut0rnd.ic:
  Applied InnoDB 5.1 snapshot ss787.
  
    r763:
    Reindent the code base (except for ha_innodb.{cc,h} and generated parser
    and lexer files).
  
    r765:
    Split lines before binary operators, not after them.
storage/innobase/lock/lock0lock.c:
  Applied InnoDB 5.1 snapshot ss787.
  
    r763:
    Reindent the code base (except for ha_innodb.{cc,h} and generated parser
    and lexer files).
  
    r764:
    Split lines before an opening parenthesis, not after one.
  
    Replace some printf(...) in debug builds with fprintf(stderr, ...).
  
    r765:
    Split lines before binary operators, not after them.
storage/innobase/log/log0log.c:
  Applied InnoDB 5.1 snapshot ss787.
  
    r763:
    Reindent the code base (except for ha_innodb.{cc,h} and generated parser
    and lexer files).
  
    r764:
    Split lines before an opening parenthesis, not after one.
  
    Replace some printf(...) in debug builds with fprintf(stderr, ...).
  
    r765:
    Split lines before binary operators, not after them.
storage/innobase/log/log0recv.c:
  Applied InnoDB 5.1 snapshot ss787.
  
    r735:
    Remove all traces of the obsolete concept of replicate spaces.
  
    r763:
    Reindent the code base (except for ha_innodb.{cc,h} and generated parser
    and lexer files).
  
    r764:
    Split lines before an opening parenthesis, not after one.
  
    Replace some printf(...) in debug builds with fprintf(stderr, ...).
  
    r765:
    Split lines before binary operators, not after them.
storage/innobase/mem/mem0dbg.c:
  Applied InnoDB 5.1 snapshot ss787.
  
    r763:
    Reindent the code base (except for ha_innodb.{cc,h} and generated parser
    and lexer files).
  
    r765:
    Split lines before binary operators, not after them.
storage/innobase/mem/mem0mem.c:
  Applied InnoDB 5.1 snapshot ss787.
  
    r763:
    Reindent the code base (except for ha_innodb.{cc,h} and generated parser
    and lexer files).
storage/innobase/mem/mem0pool.c:
  Applied InnoDB 5.1 snapshot ss787.
  
    r763:
    Reindent the code base (except for ha_innodb.{cc,h} and generated parser
    and lexer files).
storage/innobase/mtr/mtr0log.c:
  Applied InnoDB 5.1 snapshot ss787.
  
    r763:
    Reindent the code base (except for ha_innodb.{cc,h} and generated parser
    and lexer files).
storage/innobase/mtr/mtr0mtr.c:
  Applied InnoDB 5.1 snapshot ss787.
  
    r763:
    Reindent the code base (except for ha_innodb.{cc,h} and generated parser
    and lexer files).
  
    r765:
    Split lines before binary operators, not after them.
storage/innobase/os/os0file.c:
  Applied InnoDB 5.1 snapshot ss787.
  
    r763:
    Reindent the code base (except for ha_innodb.{cc,h} and generated parser
    and lexer files).
  
    r765:
    Split lines before binary operators, not after them.
storage/innobase/os/os0proc.c:
  Applied InnoDB 5.1 snapshot ss787.
  
    r763:
    Reindent the code base (except for ha_innodb.{cc,h} and generated parser
    and lexer files).
  
    r765:
    Split lines before binary operators, not after them.
storage/innobase/os/os0sync.c:
  Applied InnoDB 5.1 snapshot ss787.
  
    r763:
    Reindent the code base (except for ha_innodb.{cc,h} and generated parser
    and lexer files).
storage/innobase/os/os0thread.c:
  Applied InnoDB 5.1 snapshot ss787.
  
    r763:
    Reindent the code base (except for ha_innodb.{cc,h} and generated parser
    and lexer files).
storage/innobase/page/page0cur.c:
  Applied InnoDB 5.1 snapshot ss787.
  
    r763:
    Reindent the code base (except for ha_innodb.{cc,h} and generated parser
    and lexer files).
  
    r765:
    Split lines before binary operators, not after them.
storage/innobase/page/page0page.c:
  Applied InnoDB 5.1 snapshot ss787.
  
    r761:
    btr_cur_search_to_nth_level(): Document where cursor is left at in
    PAGE_CUR_LE searches.
  
    r762:
    page_validate(): Add missing space to error print, for real this time,
    following an error in r761.
  
    r763:
    Reindent the code base (except for ha_innodb.{cc,h} and generated parser
    and lexer files).
  
    r764:
    Split lines before an opening parenthesis, not after one.
  
    Replace some printf(...) in debug builds with fprintf(stderr, ...).
  
    r765:
    Split lines before binary operators, not after them.
storage/innobase/pars/pars0opt.c:
  Applied InnoDB 5.1 snapshot ss787.
  
    r763:
    Reindent the code base (except for ha_innodb.{cc,h} and generated parser
    and lexer files).
storage/innobase/pars/pars0pars.c:
  Applied InnoDB 5.1 snapshot ss787.
  
    r763:
    Reindent the code base (except for ha_innodb.{cc,h} and generated parser
    and lexer files).
  
    r764:
    Split lines before an opening parenthesis, not after one.
  
    Replace some printf(...) in debug builds with fprintf(stderr, ...).
  
    r765:
    Split lines before binary operators, not after them.
storage/innobase/que/que0que.c:
  Applied InnoDB 5.1 snapshot ss787.
  
    r763:
    Reindent the code base (except for ha_innodb.{cc,h} and generated parser
    and lexer files).
storage/innobase/read/read0read.c:
  Applied InnoDB 5.1 snapshot ss787.
  
    r763:
    Reindent the code base (except for ha_innodb.{cc,h} and generated parser
    and lexer files).
storage/innobase/rem/rem0cmp.c:
  Applied InnoDB 5.1 snapshot ss787.
  
    r763:
    Reindent the code base (except for ha_innodb.{cc,h} and generated parser
    and lexer files).
  
    r764:
    Split lines before an opening parenthesis, not after one.
  
    Replace some printf(...) in debug builds with fprintf(stderr, ...).
  
    r765:
    Split lines before binary operators, not after them.
storage/innobase/rem/rem0rec.c:
  Applied InnoDB 5.1 snapshot ss787.
  
    r763:
    Reindent the code base (except for ha_innodb.{cc,h} and generated parser
    and lexer files).
  
    r765:
    Split lines before binary operators, not after them.
storage/innobase/row/row0ins.c:
  Applied InnoDB 5.1 snapshot ss787.
  
    r763:
    Reindent the code base (except for ha_innodb.{cc,h} and generated parser
    and lexer files).
  
    r764:
    Split lines before an opening parenthesis, not after one.
  
    Replace some printf(...) in debug builds with fprintf(stderr, ...).
  
    r765:
    Split lines before binary operators, not after them.
storage/innobase/row/row0mysql.c:
  Applied InnoDB 5.1 snapshot ss787.
  
    r763:
    Reindent the code base (except for ha_innodb.{cc,h} and generated parser
    and lexer files).
  
    r764:
    Split lines before an opening parenthesis, not after one.
  
    Replace some printf(...) in debug builds with fprintf(stderr, ...).
  
    r765:
    Split lines before binary operators, not after them.
storage/innobase/row/row0purge.c:
  Applied InnoDB 5.1 snapshot ss787.
  
    r763:
    Reindent the code base (except for ha_innodb.{cc,h} and generated parser
    and lexer files).
storage/innobase/row/row0row.c:
  Applied InnoDB 5.1 snapshot ss787.
  
    r763:
    Reindent the code base (except for ha_innodb.{cc,h} and generated parser
    and lexer files).
  
    r765:
    Split lines before binary operators, not after them.
  
    r777:
    Remove unused code.
  
    row_build(): Remove type==ROW_COPY_ALSO_EXTERNALS, because it is never
    passed.
storage/innobase/row/row0sel.c:
  Applied InnoDB 5.1 snapshot ss787.
  
    r763:
    Reindent the code base (except for ha_innodb.{cc,h} and generated parser
    and lexer files).
  
    r764:
    Split lines before an opening parenthesis, not after one.
  
    Replace some printf(...) in debug builds with fprintf(stderr, ...).
  
    r765:
    Split lines before binary operators, not after them.
storage/innobase/row/row0uins.c:
  Applied InnoDB 5.1 snapshot ss787.
  
    r763:
    Reindent the code base (except for ha_innodb.{cc,h} and generated parser
    and lexer files).
storage/innobase/row/row0umod.c:
  Applied InnoDB 5.1 snapshot ss787.
  
    r763:
    Reindent the code base (except for ha_innodb.{cc,h} and generated parser
    and lexer files).
storage/innobase/row/row0undo.c:
  Applied InnoDB 5.1 snapshot ss787.
  
    r763:
    Reindent the code base (except for ha_innodb.{cc,h} and generated parser
    and lexer files).
storage/innobase/row/row0upd.c:
  Applied InnoDB 5.1 snapshot ss787.
  
    r763:
    Reindent the code base (except for ha_innodb.{cc,h} and generated parser
    and lexer files).
  
    r765:
    Split lines before binary operators, not after them.
storage/innobase/row/row0vers.c:
  Applied InnoDB 5.1 snapshot ss787.
  
    r763:
    Reindent the code base (except for ha_innodb.{cc,h} and generated parser
    and lexer files).
storage/innobase/srv/srv0srv.c:
  Applied InnoDB 5.1 snapshot ss787.
  
    r741:
    srv_master_thread(): Add OS_THREAD_DUMMY_RETURN to get rid of a compiler
    warning "no return value from a function returning non-void".
  
    r763:
    Reindent the code base (except for ha_innodb.{cc,h} and generated parser
    and lexer files).
  
    r764:
    Split lines before an opening parenthesis, not after one.
  
    Replace some printf(...) in debug builds with fprintf(stderr, ...).
  
    r765:
    Split lines before binary operators, not after them.
  
    r780:
    Add a warning comment above the place where we set srv_main_thread_op_info
    to "waiting for server activity" that mentions that this string should not
    be changed.
storage/innobase/srv/srv0start.c:
  Applied InnoDB 5.1 snapshot ss787.
  
    r763:
    Reindent the code base (except for ha_innodb.{cc,h} and generated parser
    and lexer files).
  
    r765:
    Split lines before binary operators, not after them.
storage/innobase/sync/sync0arr.c:
  Applied InnoDB 5.1 snapshot ss787.
  
    r763:
    Reindent the code base (except for ha_innodb.{cc,h} and generated parser
    and lexer files).
  
    r765:
    Split lines before binary operators, not after them.
storage/innobase/sync/sync0rw.c:
  Applied InnoDB 5.1 snapshot ss787.
  
    r763:
    Reindent the code base (except for ha_innodb.{cc,h} and generated parser
    and lexer files).
storage/innobase/sync/sync0sync.c:
  Applied InnoDB 5.1 snapshot ss787.
  
    r763:
    Reindent the code base (except for ha_innodb.{cc,h} and generated parser
    and lexer files).
storage/innobase/thr/thr0loc.c:
  Applied InnoDB 5.1 snapshot ss787.
  
    r763:
    Reindent the code base (except for ha_innodb.{cc,h} and generated parser
    and lexer files).
storage/innobase/trx/trx0purge.c:
  Applied InnoDB 5.1 snapshot ss787.
  
    r763:
    Reindent the code base (except for ha_innodb.{cc,h} and generated parser
    and lexer files).
  
    r765:
    Split lines before binary operators, not after them.
storage/innobase/trx/trx0rec.c:
  Applied InnoDB 5.1 snapshot ss787.
  
    r735:
    Remove all traces of the obsolete concept of replicate spaces.
  
    r763:
    Reindent the code base (except for ha_innodb.{cc,h} and generated parser
    and lexer files).
  
    r765:
    Split lines before binary operators, not after them.
storage/innobase/trx/trx0roll.c:
  Applied InnoDB 5.1 snapshot ss787.
  
    r763:
    Reindent the code base (except for ha_innodb.{cc,h} and generated parser
    and lexer files).
storage/innobase/trx/trx0rseg.c:
  Applied InnoDB 5.1 snapshot ss787.
  
    r763:
    Reindent the code base (except for ha_innodb.{cc,h} and generated parser
    and lexer files).
storage/innobase/trx/trx0sys.c:
  Applied InnoDB 5.1 snapshot ss787.
  
    r763:
    Reindent the code base (except for ha_innodb.{cc,h} and generated parser
    and lexer files).
  
    r765:
    Split lines before binary operators, not after them.
storage/innobase/trx/trx0trx.c:
  Applied InnoDB 5.1 snapshot ss787.
  
    r763:
    Reindent the code base (except for ha_innodb.{cc,h} and generated parser
    and lexer files).
  
    r764:
    Split lines before an opening parenthesis, not after one.
  
    Replace some printf(...) in debug builds with fprintf(stderr, ...).
  
    r765:
    Split lines before binary operators, not after them.
storage/innobase/trx/trx0undo.c:
  Applied InnoDB 5.1 snapshot ss787.
  
    r763:
    Reindent the code base (except for ha_innodb.{cc,h} and generated parser
    and lexer files).
  
    r765:
    Split lines before binary operators, not after them.
storage/innobase/ut/ut0byte.c:
  Applied InnoDB 5.1 snapshot ss787.
  
    r763:
    Reindent the code base (except for ha_innodb.{cc,h} and generated parser
    and lexer files).
storage/innobase/ut/ut0dbg.c:
  Applied InnoDB 5.1 snapshot ss787.
  
    r763:
    Reindent the code base (except for ha_innodb.{cc,h} and generated parser
    and lexer files).
  
    r764:
    Split lines before an opening parenthesis, not after one.
  
    Replace some printf(...) in debug builds with fprintf(stderr, ...).
storage/innobase/ut/ut0mem.c:
  Applied InnoDB 5.1 snapshot ss787.
  
    r763:
    Reindent the code base (except for ha_innodb.{cc,h} and generated parser
    and lexer files).
storage/innobase/ut/ut0ut.c:
  Applied InnoDB 5.1 snapshot ss787.
  
    r763:
    Reindent the code base (except for ha_innodb.{cc,h} and generated parser
    and lexer files).
  
    r765:
    Split lines before binary operators, not after them.
storage/innobase/ut/ut0vec.c:
  Applied InnoDB 5.1 snapshot ss787.
  
    r763:
    Reindent the code base (except for ha_innodb.{cc,h} and generated parser
    and lexer files).
storage/innobase/ut/ut0wqueue.c:
  Applied InnoDB 5.1 snapshot ss787.
  
    r763:
    Reindent the code base (except for ha_innodb.{cc,h} and generated parser
    and lexer files).
2006-09-05 03:52:15 +02:00

546 lines
13 KiB
C
Raw Blame History

/************************************************************************
Memory primitives
(c) 1994, 1995 Innobase Oy
Created 5/11/1994 Heikki Tuuri
*************************************************************************/
#include "ut0mem.h"
#ifdef UNIV_NONINL
#include "ut0mem.ic"
#endif
#include "mem0mem.h"
#include "os0sync.h"
#include "os0thread.h"
/* This struct is placed first in every allocated memory block */
typedef struct ut_mem_block_struct ut_mem_block_t;
/* The total amount of memory currently allocated from the OS with malloc */
ulint ut_total_allocated_memory = 0;
struct ut_mem_block_struct{
UT_LIST_NODE_T(ut_mem_block_t) mem_block_list;
/* mem block list node */
ulint size; /* size of allocated memory */
ulint magic_n;
};
#define UT_MEM_MAGIC_N 1601650166
/* List of all memory blocks allocated from the operating system
with malloc */
UT_LIST_BASE_NODE_T(ut_mem_block_t) ut_mem_block_list;
os_fast_mutex_t ut_list_mutex; /* this protects the list */
ibool ut_mem_block_list_inited = FALSE;
ulint* ut_mem_null_ptr = NULL;
/**************************************************************************
Initializes the mem block list at database startup. */
static
void
ut_mem_block_list_init(void)
/*========================*/
{
os_fast_mutex_init(&ut_list_mutex);
UT_LIST_INIT(ut_mem_block_list);
ut_mem_block_list_inited = TRUE;
}
/**************************************************************************
Allocates memory. Sets it also to zero if UNIV_SET_MEM_TO_ZERO is
defined and set_to_zero is TRUE. */
void*
ut_malloc_low(
/*==========*/
/* out, own: allocated memory */
ulint n, /* in: number of bytes to allocate */
ibool set_to_zero, /* in: TRUE if allocated memory should be
set to zero if UNIV_SET_MEM_TO_ZERO is
defined */
ibool assert_on_error)/* in: if TRUE, we crash mysqld if the
memory cannot be allocated */
{
ulint retry_count = 0;
void* ret;
ut_ad((sizeof(ut_mem_block_t) % 8) == 0); /* check alignment ok */
if (!ut_mem_block_list_inited) {
ut_mem_block_list_init();
}
retry:
os_fast_mutex_lock(&ut_list_mutex);
ret = malloc(n + sizeof(ut_mem_block_t));
if (ret == NULL && retry_count < 60) {
if (retry_count == 0) {
ut_print_timestamp(stderr);
fprintf(stderr,
" InnoDB: Error: cannot allocate"
" %lu bytes of\n"
"InnoDB: memory with malloc!"
" Total allocated memory\n"
"InnoDB: by InnoDB %lu bytes."
" Operating system errno: %lu\n"
"InnoDB: Check if you should"
" increase the swap file or\n"
"InnoDB: ulimits of your operating system.\n"
"InnoDB: On FreeBSD check you"
" have compiled the OS with\n"
"InnoDB: a big enough maximum process size.\n"
"InnoDB: Note that in most 32-bit"
" computers the process\n"
"InnoDB: memory space is limited"
" to 2 GB or 4 GB.\n"
"InnoDB: We keep retrying"
" the allocation for 60 seconds...\n",
(ulong) n, (ulong) ut_total_allocated_memory,
#ifdef __WIN__
(ulong) GetLastError()
#else
(ulong) errno
#endif
);
}
os_fast_mutex_unlock(&ut_list_mutex);
/* Sleep for a second and retry the allocation; maybe this is
just a temporary shortage of memory */
os_thread_sleep(1000000);
retry_count++;
goto retry;
}
if (ret == NULL) {
/* Flush stderr to make more probable that the error
message gets in the error file before we generate a seg
fault */
fflush(stderr);
os_fast_mutex_unlock(&ut_list_mutex);
/* Make an intentional seg fault so that we get a stack
trace */
/* Intentional segfault on NetWare causes an abend. Avoid this
by graceful exit handling in ut_a(). */
#if (!defined __NETWARE__)
if (assert_on_error) {
ut_print_timestamp(stderr);
fprintf(stderr,
" InnoDB: We now intentionally"
" generate a seg fault so that\n"
"InnoDB: on Linux we get a stack trace.\n");
if (*ut_mem_null_ptr) ut_mem_null_ptr = 0;
} else {
return(NULL);
}
#else
ut_a(0);
#endif
}
if (set_to_zero) {
#ifdef UNIV_SET_MEM_TO_ZERO
memset(ret, '\0', n + sizeof(ut_mem_block_t));
#endif
}
((ut_mem_block_t*)ret)->size = n + sizeof(ut_mem_block_t);
((ut_mem_block_t*)ret)->magic_n = UT_MEM_MAGIC_N;
ut_total_allocated_memory += n + sizeof(ut_mem_block_t);
UT_LIST_ADD_FIRST(mem_block_list, ut_mem_block_list,
((ut_mem_block_t*)ret));
os_fast_mutex_unlock(&ut_list_mutex);
return((void*)((byte*)ret + sizeof(ut_mem_block_t)));
}
/**************************************************************************
Allocates memory. Sets it also to zero if UNIV_SET_MEM_TO_ZERO is
defined. */
void*
ut_malloc(
/*======*/
/* out, own: allocated memory */
ulint n) /* in: number of bytes to allocate */
{
return(ut_malloc_low(n, TRUE, TRUE));
}
/**************************************************************************
Tests if malloc of n bytes would succeed. ut_malloc() asserts if memory runs
out. It cannot be used if we want to return an error message. Prints to
stderr a message if fails. */
ibool
ut_test_malloc(
/*===========*/
/* out: TRUE if succeeded */
ulint n) /* in: try to allocate this many bytes */
{
void* ret;
ret = malloc(n);
if (ret == NULL) {
ut_print_timestamp(stderr);
fprintf(stderr,
" InnoDB: Error: cannot allocate"
" %lu bytes of memory for\n"
"InnoDB: a BLOB with malloc! Total allocated memory\n"
"InnoDB: by InnoDB %lu bytes."
" Operating system errno: %d\n"
"InnoDB: Check if you should increase"
" the swap file or\n"
"InnoDB: ulimits of your operating system.\n"
"InnoDB: On FreeBSD check you have"
" compiled the OS with\n"
"InnoDB: a big enough maximum process size.\n",
(ulong) n,
(ulong) ut_total_allocated_memory,
(int) errno);
return(FALSE);
}
free(ret);
return(TRUE);
}
/**************************************************************************
Frees a memory block allocated with ut_malloc. */
void
ut_free(
/*====*/
void* ptr) /* in, own: memory block */
{
ut_mem_block_t* block;
block = (ut_mem_block_t*)((byte*)ptr - sizeof(ut_mem_block_t));
os_fast_mutex_lock(&ut_list_mutex);
ut_a(block->magic_n == UT_MEM_MAGIC_N);
ut_a(ut_total_allocated_memory >= block->size);
ut_total_allocated_memory -= block->size;
UT_LIST_REMOVE(mem_block_list, ut_mem_block_list, block);
free(block);
os_fast_mutex_unlock(&ut_list_mutex);
}
/**************************************************************************
Implements realloc. This is needed by /pars/lexyy.c. Otherwise, you should not
use this function because the allocation functions in mem0mem.h are the
recommended ones in InnoDB.
man realloc in Linux, 2004:
realloc() changes the size of the memory block pointed to
by ptr to size bytes. The contents will be unchanged to
the minimum of the old and new sizes; newly allocated mem<65>
ory will be uninitialized. If ptr is NULL, the call is
equivalent to malloc(size); if size is equal to zero, the
call is equivalent to free(ptr). Unless ptr is NULL, it
must have been returned by an earlier call to malloc(),
calloc() or realloc().
RETURN VALUE
realloc() returns a pointer to the newly allocated memory,
which is suitably aligned for any kind of variable and may
be different from ptr, or NULL if the request fails. If
size was equal to 0, either NULL or a pointer suitable to
be passed to free() is returned. If realloc() fails the
original block is left untouched - it is not freed or
moved. */
void*
ut_realloc(
/*=======*/
/* out, own: pointer to new mem block or NULL */
void* ptr, /* in: pointer to old block or NULL */
ulint size) /* in: desired size */
{
ut_mem_block_t* block;
ulint old_size;
ulint min_size;
void* new_ptr;
if (ptr == NULL) {
return(ut_malloc(size));
}
if (size == 0) {
ut_free(ptr);
return(NULL);
}
block = (ut_mem_block_t*)((byte*)ptr - sizeof(ut_mem_block_t));
ut_a(block->magic_n == UT_MEM_MAGIC_N);
old_size = block->size - sizeof(ut_mem_block_t);
if (size < old_size) {
min_size = size;
} else {
min_size = old_size;
}
new_ptr = ut_malloc(size);
if (new_ptr == NULL) {
return(NULL);
}
/* Copy the old data from ptr */
ut_memcpy(new_ptr, ptr, min_size);
ut_free(ptr);
return(new_ptr);
}
/**************************************************************************
Frees in shutdown all allocated memory not freed yet. */
void
ut_free_all_mem(void)
/*=================*/
{
ut_mem_block_t* block;
os_fast_mutex_free(&ut_list_mutex);
while ((block = UT_LIST_GET_FIRST(ut_mem_block_list))) {
ut_a(block->magic_n == UT_MEM_MAGIC_N);
ut_a(ut_total_allocated_memory >= block->size);
ut_total_allocated_memory -= block->size;
UT_LIST_REMOVE(mem_block_list, ut_mem_block_list, block);
free(block);
}
if (ut_total_allocated_memory != 0) {
fprintf(stderr,
"InnoDB: Warning: after shutdown"
" total allocated memory is %lu\n",
(ulong) ut_total_allocated_memory);
}
}
/**************************************************************************
Copies up to size - 1 characters from the NUL-terminated string src to
dst, NUL-terminating the result. Returns strlen(src), so truncation
occurred if the return value >= size. */
ulint
ut_strlcpy(
/*=======*/
/* out: strlen(src) */
char* dst, /* in: destination buffer */
const char* src, /* in: source buffer */
ulint size) /* in: size of destination buffer */
{
ulint src_size = strlen(src);
if (size != 0) {
ulint n = ut_min(src_size, size - 1);
memcpy(dst, src, n);
dst[n] = '\0';
}
return(src_size);
}
/**************************************************************************
Like ut_strlcpy, but if src doesn't fit in dst completely, copies the last
(size - 1) bytes of src, not the first. */
ulint
ut_strlcpy_rev(
/*===========*/
/* out: strlen(src) */
char* dst, /* in: destination buffer */
const char* src, /* in: source buffer */
ulint size) /* in: size of destination buffer */
{
ulint src_size = strlen(src);
if (size != 0) {
ulint n = ut_min(src_size, size - 1);
memcpy(dst, src + src_size - n, n + 1);
}
return(src_size);
}
/**************************************************************************
Make a quoted copy of a NUL-terminated string. Leading and trailing
quotes will not be included; only embedded quotes will be escaped.
See also ut_strlenq() and ut_memcpyq(). */
char*
ut_strcpyq(
/*=======*/
/* out: pointer to end of dest */
char* dest, /* in: output buffer */
char q, /* in: the quote character */
const char* src) /* in: null-terminated string */
{
while (*src) {
if ((*dest++ = *src++) == q) {
*dest++ = q;
}
}
return(dest);
}
/**************************************************************************
Make a quoted copy of a fixed-length string. Leading and trailing
quotes will not be included; only embedded quotes will be escaped.
See also ut_strlenq() and ut_strcpyq(). */
char*
ut_memcpyq(
/*=======*/
/* out: pointer to end of dest */
char* dest, /* in: output buffer */
char q, /* in: the quote character */
const char* src, /* in: string to be quoted */
ulint len) /* in: length of src */
{
const char* srcend = src + len;
while (src < srcend) {
if ((*dest++ = *src++) == q) {
*dest++ = q;
}
}
return(dest);
}
/**************************************************************************
Return the number of times s2 occurs in s1. Overlapping instances of s2
are only counted once. */
ulint
ut_strcount(
/*========*/
/* out: the number of times s2 occurs in s1 */
const char* s1, /* in: string to search in */
const char* s2) /* in: string to search for */
{
ulint count = 0;
ulint len = strlen(s2);
if (len == 0) {
return(0);
}
for (;;) {
s1 = strstr(s1, s2);
if (!s1) {
break;
}
count++;
s1 += len;
}
return(count);
}
/**************************************************************************
Replace every occurrence of s1 in str with s2. Overlapping instances of s1
are only replaced once. */
char *
ut_strreplace(
/*==========*/
/* out, own: modified string, must be
freed with mem_free() */
const char* str, /* in: string to operate on */
const char* s1, /* in: string to replace */
const char* s2) /* in: string to replace s1 with */
{
char* new_str;
char* ptr;
const char* str_end;
ulint str_len = strlen(str);
ulint s1_len = strlen(s1);
ulint s2_len = strlen(s2);
ulint count = 0;
int len_delta = (int)s2_len - (int)s1_len;
str_end = str + str_len;
if (len_delta <= 0) {
len_delta = 0;
} else {
count = ut_strcount(str, s1);
}
new_str = mem_alloc(str_len + count * len_delta + 1);
ptr = new_str;
while (str) {
const char* next = strstr(str, s1);
if (!next) {
next = str_end;
}
memcpy(ptr, str, next - str);
ptr += next - str;
if (next == str_end) {
break;
}
memcpy(ptr, s2, s2_len);
ptr += s2_len;
str = next + s1_len;
}
*ptr = '\0';
return(new_str);
}