]> git.pld-linux.org Git - packages/mysql.git/commitdiff
- update percona patches, automate that process
authorElan Ruusamäe <glen@pld-linux.org>
Wed, 26 Aug 2009 10:17:02 +0000 (10:17 +0000)
committercvs2git <feedback@pld-linux.org>
Sun, 24 Jun 2012 12:13:13 +0000 (12:13 +0000)
Changed files:
    mysql-innodb_dict_size_limit.patch -> 1.1.2.1
    mysql-innodb_extra_rseg.patch -> 1.1.2.1
    mysql-innodb_fsync_source.patch -> 1.1.2.2
    mysql-innodb_io_patches.patch -> 1.1.2.5
    mysql-innodb_io_pattern.patch -> 1.1.2.4
    mysql-innodb_locks_held.patch -> 1.1.2.5
    mysql-innodb_recovery_patches.patch -> 1.1.2.1
    mysql-innodb_rw_lock.patch -> 1.1.2.4
    mysql-innodb_show_bp.patch -> 1.1.2.2
    mysql-innodb_split_buf_pool_mutex.patch -> 1.1.2.1
    mysql-innodb_thread_concurrency_timer_based.patch -> 1.1.2.1
    mysql-innodb_use_sys_malloc.patch -> 1.1.2.1
    mysql-microslow_innodb.patch -> 1.1.2.11
    mysql-profiling_slow.patch -> 1.1.2.1
    mysql-userstatv2.patch -> 1.1.2.11
    mysql.spec -> 1.353.2.76

16 files changed:
mysql-innodb_dict_size_limit.patch
mysql-innodb_extra_rseg.patch
mysql-innodb_fsync_source.patch
mysql-innodb_io_patches.patch
mysql-innodb_io_pattern.patch
mysql-innodb_locks_held.patch
mysql-innodb_recovery_patches.patch [new file with mode: 0644]
mysql-innodb_rw_lock.patch
mysql-innodb_show_bp.patch
mysql-innodb_split_buf_pool_mutex.patch [new file with mode: 0644]
mysql-innodb_thread_concurrency_timer_based.patch
mysql-innodb_use_sys_malloc.patch [new file with mode: 0644]
mysql-microslow_innodb.patch
mysql-profiling_slow.patch
mysql-userstatv2.patch
mysql.spec

index 8ef4e36af2f65ba892dc155267df02ed39d793ff..843d043e7ec7118f1f18f7f26d691496890b7a34 100644 (file)
@@ -1,6 +1,6 @@
-diff -ru mysql-5.0.75_base/innobase/dict/dict0boot.c mysql-5.0.75/innobase/dict/dict0boot.c
---- mysql-5.0.75_base/innobase/dict/dict0boot.c        2008-12-19 02:19:35.000000000 +0900
-+++ mysql-5.0.75/innobase/dict/dict0boot.c     2009-01-23 19:28:25.000000000 +0900
+diff -r 6eeee157fd40 innobase/dict/dict0boot.c
+--- a/innobase/dict/dict0boot.c        Fri Jul 03 15:41:34 2009 -0700
++++ b/innobase/dict/dict0boot.c        Fri Jul 03 15:41:41 2009 -0700
 @@ -247,6 +247,7 @@
        system tables */
        /*-------------------------*/
@@ -33,9 +33,9 @@ diff -ru mysql-5.0.75_base/innobase/dict/dict0boot.c mysql-5.0.75/innobase/dict/
  
        dict_mem_table_add_col(table, "INDEX_ID", DATA_BINARY, 0,0,0);
        dict_mem_table_add_col(table, "POS", DATA_INT, 0, 4, 0);
-diff -ru mysql-5.0.75_base/innobase/dict/dict0crea.c mysql-5.0.75/innobase/dict/dict0crea.c
---- mysql-5.0.75_base/innobase/dict/dict0crea.c        2008-12-19 02:19:35.000000000 +0900
-+++ mysql-5.0.75/innobase/dict/dict0crea.c     2009-01-23 19:41:38.000000000 +0900
+diff -r 6eeee157fd40 innobase/dict/dict0crea.c
+--- a/innobase/dict/dict0crea.c        Fri Jul 03 15:41:34 2009 -0700
++++ b/innobase/dict/dict0crea.c        Fri Jul 03 15:41:41 2009 -0700
 @@ -1178,6 +1178,9 @@
                /* Foreign constraint system tables have already been
                created, and they are ok */
@@ -47,20 +47,20 @@ diff -ru mysql-5.0.75_base/innobase/dict/dict0crea.c mysql-5.0.75/innobase/dict/
  
                return(DB_SUCCESS);
 @@ -1266,6 +1269,11 @@
+       que_graph_free(graph);
        
        trx->op_info = "";
++
 +      table1 = dict_table_get_low("SYS_FOREIGN");
 +      table2 = dict_table_get_low("SYS_FOREIGN_COLS");
 +      table1->n_mysql_handles_opened = 1; /* for pin */
 +      table2->n_mysql_handles_opened = 1; /* for pin */
-+
        row_mysql_unlock_data_dictionary(trx);
  
-       trx_free_for_mysql(trx);
-diff -ru mysql-5.0.75_base/innobase/dict/dict0dict.c mysql-5.0.75/innobase/dict/dict0dict.c
---- mysql-5.0.75_base/innobase/dict/dict0dict.c        2008-12-19 02:19:35.000000000 +0900
-+++ mysql-5.0.75/innobase/dict/dict0dict.c     2009-01-26 16:03:29.000000000 +0900
+diff -r 6eeee157fd40 innobase/dict/dict0dict.c
+--- a/innobase/dict/dict0dict.c        Fri Jul 03 15:41:34 2009 -0700
++++ b/innobase/dict/dict0dict.c        Fri Jul 03 15:41:41 2009 -0700
 @@ -638,6 +638,8 @@
        mutex_enter(&(dict_sys->mutex));
  
@@ -79,15 +79,15 @@ diff -ru mysql-5.0.75_base/innobase/dict/dict0dict.c mysql-5.0.75/innobase/dict/
        mutex_exit(&(dict_sys->mutex));
  
        if (table != NULL) {
-@@ -787,6 +791,8 @@
+@@ -786,6 +790,8 @@
                table->n_mysql_handles_opened++;
        }
-+      dict_table_LRU_trim(table);
 +
++      dict_table_LRU_trim(table);
        mutex_exit(&(dict_sys->mutex));
  
-       if (table != NULL) {
 @@ -1267,20 +1273,64 @@
  too much space. Currently not used! */
  
@@ -100,18 +100,24 @@ diff -ru mysql-5.0.75_base/innobase/dict/dict0dict.c mysql-5.0.75/innobase/dict/
  {
        dict_table_t*   table;
        dict_table_t*   prev_table;
+-
+-      ut_error;
+-
+-#ifdef UNIV_SYNC_DEBUG
+-      ut_ad(mutex_own(&(dict_sys->mutex)));
+-#endif /* UNIV_SYNC_DEBUG */
+-
 +      dict_foreign_t* foreign;
 +      ulint           n_removed;
 +      ulint           n_have_parent;
 +      ulint           cached_foreign_tables;
--      ut_error;
++
 +      //ut_error;
- #ifdef UNIV_SYNC_DEBUG
-       ut_ad(mutex_own(&(dict_sys->mutex)));
- #endif /* UNIV_SYNC_DEBUG */
++
++#ifdef UNIV_SYNC_DEBUG
++      ut_ad(mutex_own(&(dict_sys->mutex)));
++#endif /* UNIV_SYNC_DEBUG */
++
 +retry:
 +      n_removed = n_have_parent = 0;
        table = UT_LIST_GET_LAST(dict_sys->table_LRU);
@@ -156,7 +162,7 @@ diff -ru mysql-5.0.75_base/innobase/dict/dict0dict.c mysql-5.0.75/innobase/dict/
        while (table && (dict_sys->size >
                         buf_pool_get_max_size() / DICT_POOL_PER_VARYING)) {
  
-@@ -1292,6 +1341,7 @@
+@@ -1292,6 +1342,7 @@
  
                table = prev_table;
        }
@@ -164,9 +170,9 @@ diff -ru mysql-5.0.75_base/innobase/dict/dict0dict.c mysql-5.0.75/innobase/dict/
  }
  
  /**************************************************************************
-diff -ru mysql-5.0.75_base/innobase/ibuf/ibuf0ibuf.c mysql-5.0.75/innobase/ibuf/ibuf0ibuf.c
---- mysql-5.0.75_base/innobase/ibuf/ibuf0ibuf.c        2009-01-23 11:44:18.000000000 +0900
-+++ mysql-5.0.75/innobase/ibuf/ibuf0ibuf.c     2009-01-23 19:22:54.000000000 +0900
+diff -r 6eeee157fd40 innobase/ibuf/ibuf0ibuf.c
+--- a/innobase/ibuf/ibuf0ibuf.c        Fri Jul 03 15:41:34 2009 -0700
++++ b/innobase/ibuf/ibuf0ibuf.c        Fri Jul 03 15:41:41 2009 -0700
 @@ -535,6 +535,7 @@
        sprintf(buf, "SYS_IBUF_TABLE_%lu", (ulong) space);
        /* use old-style record format for the insert buffer */
@@ -175,9 +181,9 @@ diff -ru mysql-5.0.75_base/innobase/ibuf/ibuf0ibuf.c mysql-5.0.75/innobase/ibuf/
  
        dict_mem_table_add_col(table, "PAGE_NO", DATA_BINARY, 0, 0, 0);
        dict_mem_table_add_col(table, "TYPES", DATA_BINARY, 0, 0, 0);
-diff -ru mysql-5.0.75_base/innobase/include/dict0dict.h mysql-5.0.75/innobase/include/dict0dict.h
---- mysql-5.0.75_base/innobase/include/dict0dict.h     2008-12-19 02:19:35.000000000 +0900
-+++ mysql-5.0.75/innobase/include/dict0dict.h  2009-01-23 21:46:22.000000000 +0900
+diff -r 6eeee157fd40 innobase/include/dict0dict.h
+--- a/innobase/include/dict0dict.h     Fri Jul 03 15:41:34 2009 -0700
++++ b/innobase/include/dict0dict.h     Fri Jul 03 15:41:41 2009 -0700
 @@ -938,6 +938,11 @@
        const char*     ptr,    /* in: scan from */
        const char*     string);/* in: look for this */
@@ -190,9 +196,9 @@ diff -ru mysql-5.0.75_base/innobase/include/dict0dict.h mysql-5.0.75/innobase/in
  /* Buffers for storing detailed information about the latest foreign key
  and unique key errors */
  extern FILE*  dict_foreign_err_file;
-diff -ru mysql-5.0.75_base/innobase/include/dict0dict.ic mysql-5.0.75/innobase/include/dict0dict.ic
---- mysql-5.0.75_base/innobase/include/dict0dict.ic    2008-12-19 02:19:35.000000000 +0900
-+++ mysql-5.0.75/innobase/include/dict0dict.ic 2009-01-23 18:35:55.000000000 +0900
+diff -r 6eeee157fd40 innobase/include/dict0dict.ic
+--- a/innobase/include/dict0dict.ic    Fri Jul 03 15:41:34 2009 -0700
++++ b/innobase/include/dict0dict.ic    Fri Jul 03 15:41:41 2009 -0700
 @@ -533,6 +533,13 @@
  
        HASH_SEARCH(name_hash, dict_sys->table_hash, table_fold, table,
@@ -218,19 +224,19 @@ diff -ru mysql-5.0.75_base/innobase/include/dict0dict.ic mysql-5.0.75/innobase/i
                /* lock_push(trx, table, LOCK_DICT_MEM_FIX) */
        }
        
-diff -ru mysql-5.0.75_base/innobase/include/srv0srv.h mysql-5.0.75/innobase/include/srv0srv.h
---- mysql-5.0.75_base/innobase/include/srv0srv.h       2009-01-23 11:44:19.000000000 +0900
-+++ mysql-5.0.75/innobase/include/srv0srv.h    2009-01-27 10:47:26.000000000 +0900
+diff -r 6eeee157fd40 innobase/include/srv0srv.h
+--- a/innobase/include/srv0srv.h       Fri Jul 03 15:41:34 2009 -0700
++++ b/innobase/include/srv0srv.h       Fri Jul 03 15:41:41 2009 -0700
 @@ -146,6 +146,8 @@
+ extern ulint  srv_enable_unsafe_group_commit;
  extern uint   srv_read_ahead;
- extern ulint  srv_adaptive_checkpoint;
-+extern ulint  srv_dict_size_limit;
+ extern uint   srv_adaptive_checkpoint;
 +
++extern ulint  srv_dict_size_limit;
  extern volatile ibool srv_io_pattern;
  extern ulong  srv_io_pattern_trace;
- extern ulong  srv_io_pattern_trace_running;
-@@ -545,6 +547,7 @@
+@@ -552,6 +554,7 @@
          ulint innodb_data_writes;
          ulint innodb_data_written;
          ulint innodb_data_reads;
@@ -238,19 +244,19 @@ diff -ru mysql-5.0.75_base/innobase/include/srv0srv.h mysql-5.0.75/innobase/incl
          ulint innodb_buffer_pool_pages_total;
          ulint innodb_buffer_pool_pages_data;
          ulint innodb_buffer_pool_pages_dirty;
-diff -ru mysql-5.0.75_base/innobase/srv/srv0srv.c mysql-5.0.75/innobase/srv/srv0srv.c
---- mysql-5.0.75_base/innobase/srv/srv0srv.c   2009-01-23 11:44:19.000000000 +0900
-+++ mysql-5.0.75/innobase/srv/srv0srv.c        2009-01-27 10:52:19.000000000 +0900
-@@ -345,6 +345,8 @@
- uint  srv_read_ahead = 3; /* 1: random  2: linear  3: Both */
- ulint srv_adaptive_checkpoint = 0; /* 0:disable 1:enable */
+diff -r 6eeee157fd40 innobase/srv/srv0srv.c
+--- a/innobase/srv/srv0srv.c   Fri Jul 03 15:41:34 2009 -0700
++++ b/innobase/srv/srv0srv.c   Fri Jul 03 15:41:41 2009 -0700
+@@ -352,6 +352,8 @@
  
-+ulint srv_dict_size_limit = 0;
+ uint  srv_read_ahead = 3; /* 1: random  2: linear  3: Both */
+ uint  srv_adaptive_checkpoint = 0; /* 0: none  1: reflex  2: estimate */
 +
++ulint srv_dict_size_limit = 0;
  volatile ibool srv_io_pattern = FALSE;
  ulint   srv_io_pattern_trace = 0;
- ulint   srv_io_pattern_trace_running = 0;
-@@ -1936,6 +1938,7 @@
+@@ -1953,6 +1955,7 @@
          export_vars.innodb_data_reads= os_n_file_reads;
          export_vars.innodb_data_writes= os_n_file_writes;
          export_vars.innodb_data_written= srv_data_written;
@@ -258,82 +264,9 @@ diff -ru mysql-5.0.75_base/innobase/srv/srv0srv.c mysql-5.0.75/innobase/srv/srv0
          export_vars.innodb_buffer_pool_read_requests= buf_pool->n_page_gets;
          export_vars.innodb_buffer_pool_write_requests= srv_buf_pool_write_requests;
          export_vars.innodb_buffer_pool_wait_free= srv_buf_pool_wait_free;
-diff -ru mysql-5.0.75_base/sql/ha_innodb.cc mysql-5.0.75/sql/ha_innodb.cc
---- mysql-5.0.75_base/sql/ha_innodb.cc 2009-01-23 11:44:19.000000000 +0900
-+++ mysql-5.0.75/sql/ha_innodb.cc      2009-01-27 10:54:08.000000000 +0900
-@@ -288,6 +288,8 @@
-   (char*) &export_vars.innodb_dblwr_pages_written,        SHOW_LONG},
-   {"dblwr_writes",
-   (char*) &export_vars.innodb_dblwr_writes,               SHOW_LONG},
-+  {"dict_tables",
-+  (char*) &export_vars.innodb_dict_tables,                SHOW_LONG},
-   {"log_waits",
-   (char*) &export_vars.innodb_log_waits,                  SHOW_LONG},
-   {"log_write_requests",
-diff -ru mysql-5.0.75_base/sql/ha_innodb.h mysql-5.0.75/sql/ha_innodb.h
---- mysql-5.0.75_base/sql/ha_innodb.h  2009-01-23 11:44:19.000000000 +0900
-+++ mysql-5.0.75/sql/ha_innodb.h       2009-01-26 15:49:37.000000000 +0900
-@@ -242,6 +242,7 @@
- extern ulong srv_flush_neighbor_pages;
- extern uint srv_read_ahead;
- extern ulong srv_adaptive_checkpoint;
-+extern ulong srv_dict_size_limit;
- extern ulong srv_show_locks_held;
- extern ulong srv_show_verbose_locks;
- extern ulong srv_io_pattern_trace;
-diff -ru mysql-5.0.75_base/sql/mysqld.cc mysql-5.0.75/sql/mysqld.cc
---- mysql-5.0.75_base/sql/mysqld.cc    2009-01-23 11:44:19.000000000 +0900
-+++ mysql-5.0.75/sql/mysqld.cc 2009-01-26 15:29:45.000000000 +0900
-@@ -5053,6 +5053,7 @@
-   OPT_INNODB_ADAPTIVE_CHECKPOINT,
-   OPT_INNODB_READ_IO_THREADS,
-   OPT_INNODB_WRITE_IO_THREADS,
-+  OPT_INNODB_DICT_SIZE_LIMIT,
-   OPT_INNODB_ADAPTIVE_HASH_INDEX,
-   OPT_RPL_MIRROR_BINLOG,
-   OPT_SYNC_MIRROR_BINLOG,
-@@ -5406,6 +5407,10 @@
-    "Number of background write I/O threads in InnoDB.",
-    (gptr*) &innobase_write_io_threads, (gptr*) &innobase_write_io_threads,
-    0, GET_LONG, REQUIRED_ARG, 1, 1, 64, 0, 0, 0},
-+  {"innodb_dict_size_limit", OPT_INNODB_DICT_SIZE_LIMIT,
-+   "Limit the allocated memory for dictionary cache. (0: unlimited)",
-+   (gptr*) &srv_dict_size_limit, (gptr*) &srv_dict_size_limit, 0,
-+   GET_ULONG, REQUIRED_ARG, 0, 0, ULONG_MAX, 0, 0 ,0},
-   {"innodb_io_pattern_trace", OPT_INNODB_IO_PATTERN_TRACE,
-    "Create/Drop the internal hash table for IO pattern tracing.",
-    (gptr*) &srv_io_pattern_trace, (gptr*) &srv_io_pattern_trace,
-diff -ru mysql-5.0.75_base/sql/set_var.cc mysql-5.0.75/sql/set_var.cc
---- mysql-5.0.75_base/sql/set_var.cc   2009-01-23 11:44:19.000000000 +0900
-+++ mysql-5.0.75/sql/set_var.cc        2009-01-26 15:46:45.000000000 +0900
-@@ -522,6 +522,8 @@
-                                       &innodb_read_ahead_typelib, fix_innodb_read_ahead);
- sys_var_long_ptr      sys_innodb_adaptive_checkpoint("innodb_adaptive_checkpoint",
-                                                       &srv_adaptive_checkpoint);
-+sys_var_long_ptr      sys_innodb_dict_size_limit("innodb_dict_size_limit",
-+                                                   &srv_dict_size_limit);
- sys_var_long_ptr  sys_innodb_show_locks_held(
-                                         "innodb_show_locks_held",
-                                         &srv_show_locks_held);
-@@ -905,6 +907,7 @@
-   &sys_innodb_flush_neighbor_pages,
-   &sys_innodb_read_ahead,
-   &sys_innodb_adaptive_checkpoint,
-+  &sys_innodb_dict_size_limit,
-   &sys_innodb_show_locks_held,
-   &sys_innodb_show_verbose_locks,
-   &sys_innodb_io_pattern_trace,
-@@ -1056,6 +1059,7 @@
-   {sys_innodb_adaptive_checkpoint.name, (char*) &sys_innodb_adaptive_checkpoint, SHOW_SYS},
-   {"innodb_read_io_threads", (char*) &innobase_read_io_threads, SHOW_LONG},
-   {"innodb_write_io_threads", (char*) &innobase_write_io_threads, SHOW_LONG},
-+  {sys_innodb_dict_size_limit.name, (char*) &sys_innodb_dict_size_limit, SHOW_SYS},
-   {sys_innodb_io_pattern_trace.name, (char*) &sys_innodb_io_pattern_trace, SHOW_SYS},
-   {sys_innodb_io_pattern_trace_running.name, (char*) &sys_innodb_io_pattern_trace_running, SHOW_SYS},
-   {sys_innodb_io_pattern_size_limit.name, (char*) &sys_innodb_io_pattern_size_limit, SHOW_SYS},
-diff -ruN mysql-5.0.75_base/mysql-test/r/innodb_dict_size_limit.result mysql-5.0.75/mysql-test/r/innodb_dict_size_limit.result
---- /dev/null  1970-01-01 09:00:00.000000000 +0900
-+++ mysql-5.0.75/mysql-test/r/innodb_dict_size_limit.result    2009-01-27 11:43:46.000000000 +0900
+diff -r 6eeee157fd40 mysql-test/r/innodb_dict_size_limit.result
+--- /dev/null  Thu Jan 01 00:00:00 1970 +0000
++++ b/mysql-test/r/innodb_dict_size_limit.result       Fri Jul 03 15:41:41 2009 -0700
 @@ -0,0 +1,60 @@
 +DROP TABLE IF EXISTS `test_5`;
 +DROP TABLE IF EXISTS `test_4`;
@@ -395,9 +328,9 @@ diff -ruN mysql-5.0.75_base/mysql-test/r/innodb_dict_size_limit.result mysql-5.0
 +DROP TABLE `test_3`;
 +DROP TABLE `test_2`;
 +DROP TABLE `test_1`;
-diff -ruN mysql-5.0.75_base/mysql-test/t/innodb_dict_size_limit.test mysql-5.0.75/mysql-test/t/innodb_dict_size_limit.test
---- /dev/null  1970-01-01 09:00:00.000000000 +0900
-+++ mysql-5.0.75/mysql-test/t/innodb_dict_size_limit.test      2009-01-27 11:43:36.000000000 +0900
+diff -r 6eeee157fd40 mysql-test/t/innodb_dict_size_limit.test
+--- /dev/null  Thu Jan 01 00:00:00 1970 +0000
++++ b/mysql-test/t/innodb_dict_size_limit.test Fri Jul 03 15:41:41 2009 -0700
 @@ -0,0 +1,63 @@
 +#
 +# Test for new variable innodb_dict_size_limit;
@@ -462,9 +395,9 @@ diff -ruN mysql-5.0.75_base/mysql-test/t/innodb_dict_size_limit.test mysql-5.0.7
 +DROP TABLE `test_2`;
 +DROP TABLE `test_1`;
 +
-diff -ruN mysql-5.0.75_base/patch_info/innodb_dict_size_limit.info mysql-5.0.75/patch_info/innodb_dict_size_limit.info
---- /dev/null  1970-01-01 09:00:00.000000000 +0900
-+++ mysql-5.0.75/patch_info/innodb_dict_size_limit.info        2009-01-26 15:46:45.000000000 +0900
+diff -r 6eeee157fd40 patch_info/innodb_dict_size_limit.info
+--- /dev/null  Thu Jan 01 00:00:00 1970 +0000
++++ b/patch_info/innodb_dict_size_limit.info   Fri Jul 03 15:41:41 2009 -0700
 @@ -0,0 +1,9 @@
 +File=innodb_dict_size_limit.patch
 +Name=Limit dictionary cache size
@@ -475,3 +408,76 @@ diff -ruN mysql-5.0.75_base/patch_info/innodb_dict_size_limit.info mysql-5.0.75/
 +ChangeLog=
 +2009-01-26
 +YK: Initial release
+diff -r 6eeee157fd40 sql/ha_innodb.cc
+--- a/sql/ha_innodb.cc Fri Jul 03 15:41:34 2009 -0700
++++ b/sql/ha_innodb.cc Fri Jul 03 15:41:41 2009 -0700
+@@ -288,6 +288,8 @@
+   (char*) &export_vars.innodb_dblwr_pages_written,        SHOW_LONG},
+   {"dblwr_writes",
+   (char*) &export_vars.innodb_dblwr_writes,               SHOW_LONG},
++  {"dict_tables",
++  (char*) &export_vars.innodb_dict_tables,                SHOW_LONG},
+   {"log_waits",
+   (char*) &export_vars.innodb_log_waits,                  SHOW_LONG},
+   {"log_write_requests",
+diff -r 6eeee157fd40 sql/ha_innodb.h
+--- a/sql/ha_innodb.h  Fri Jul 03 15:41:34 2009 -0700
++++ b/sql/ha_innodb.h  Fri Jul 03 15:41:41 2009 -0700
+@@ -243,6 +243,7 @@
+ extern ulong srv_enable_unsafe_group_commit;
+ extern uint srv_read_ahead;
+ extern uint srv_adaptive_checkpoint;
++extern ulong srv_dict_size_limit;
+ extern ulong srv_show_locks_held;
+ extern ulong srv_show_verbose_locks;
+ extern ulong srv_io_pattern_trace;
+diff -r 6eeee157fd40 sql/mysqld.cc
+--- a/sql/mysqld.cc    Fri Jul 03 15:41:34 2009 -0700
++++ b/sql/mysqld.cc    Fri Jul 03 15:41:41 2009 -0700
+@@ -5101,6 +5101,7 @@
+   OPT_INNODB_ADAPTIVE_CHECKPOINT,
+   OPT_INNODB_READ_IO_THREADS,
+   OPT_INNODB_WRITE_IO_THREADS,
++  OPT_INNODB_DICT_SIZE_LIMIT,
+   OPT_INNODB_ADAPTIVE_HASH_INDEX,
+   OPT_FEDERATED,
+   OPT_INNODB_USE_LEGACY_CARDINALITY_ALGORITHM
+@@ -5464,6 +5465,10 @@
+    "Number of background write I/O threads in InnoDB.",
+    (gptr*) &innobase_write_io_threads, (gptr*) &innobase_write_io_threads,
+    0, GET_LONG, REQUIRED_ARG, 8, 1, 64, 0, 0, 0},
++  {"innodb_dict_size_limit", OPT_INNODB_DICT_SIZE_LIMIT,
++   "Limit the allocated memory for dictionary cache. (0: unlimited)",
++   (gptr*) &srv_dict_size_limit, (gptr*) &srv_dict_size_limit, 0,
++   GET_ULONG, REQUIRED_ARG, 0, 0, ULONG_MAX, 0, 0 ,0},
+   {"innodb_io_pattern_trace", OPT_INNODB_IO_PATTERN_TRACE,
+    "Create/Drop the internal hash table for IO pattern tracing.",
+    (gptr*) &srv_io_pattern_trace, (gptr*) &srv_io_pattern_trace,
+diff -r 6eeee157fd40 sql/set_var.cc
+--- a/sql/set_var.cc   Fri Jul 03 15:41:34 2009 -0700
++++ b/sql/set_var.cc   Fri Jul 03 15:41:41 2009 -0700
+@@ -540,6 +540,8 @@
+ sys_var_enum  sys_innodb_adaptive_checkpoint("innodb_adaptive_checkpoint",
+                            &srv_adaptive_checkpoint,
+                            &innodb_adaptive_checkpoint_typelib, fix_innodb_adaptive_checkpoint);
++sys_var_long_ptr      sys_innodb_dict_size_limit("innodb_dict_size_limit",
++                                                   &srv_dict_size_limit);
+ sys_var_long_ptr  sys_innodb_show_locks_held(
+                                         "innodb_show_locks_held",
+                                         &srv_show_locks_held);
+@@ -930,6 +932,7 @@
+   &sys_innodb_read_ahead,
+   &sys_innodb_enable_unsafe_group_commit,
+   &sys_innodb_adaptive_checkpoint,
++  &sys_innodb_dict_size_limit,
+   &sys_innodb_show_locks_held,
+   &sys_innodb_show_verbose_locks,
+   &sys_innodb_io_pattern_trace,
+@@ -1084,6 +1087,7 @@
+   {sys_innodb_adaptive_checkpoint.name, (char*) &sys_innodb_adaptive_checkpoint, SHOW_SYS},
+   {"innodb_read_io_threads", (char*) &innobase_read_io_threads, SHOW_LONG},
+   {"innodb_write_io_threads", (char*) &innobase_write_io_threads, SHOW_LONG},
++  {sys_innodb_dict_size_limit.name, (char*) &sys_innodb_dict_size_limit, SHOW_SYS},
+   {sys_innodb_io_pattern_trace.name, (char*) &sys_innodb_io_pattern_trace, SHOW_SYS},
+   {sys_innodb_io_pattern_trace_running.name, (char*) &sys_innodb_io_pattern_trace_running, SHOW_SYS},
+   {sys_innodb_io_pattern_size_limit.name, (char*) &sys_innodb_io_pattern_size_limit, SHOW_SYS},
index 1c8f4299cb2988b47e1d70440b2506571de0aa33..cab3b26728c3a84c1dddacd15db51f3ea3f7c8d6 100644 (file)
@@ -1,18 +1,18 @@
-diff -ruN a/innobase/include/srv0srv.h b/innobase/include/srv0srv.h
---- a/innobase/include/srv0srv.h       2009-05-06 15:35:46.000000000 +0900
-+++ b/innobase/include/srv0srv.h       2009-05-06 13:37:45.000000000 +0900
-@@ -147,6 +147,8 @@
+diff -r 85e7025cf2d1 innobase/include/srv0srv.h
+--- a/innobase/include/srv0srv.h       Fri Jul 03 15:41:41 2009 -0700
++++ b/innobase/include/srv0srv.h       Fri Jul 03 15:41:47 2009 -0700
+@@ -146,6 +146,8 @@
+ extern ulint  srv_enable_unsafe_group_commit;
  extern uint   srv_read_ahead;
- extern ulint  srv_adaptive_checkpoint;
-+extern ulint  srv_extra_rsegments;
+ extern uint   srv_adaptive_checkpoint;
 +
++extern ulint  srv_extra_rsegments;
  extern ulint  srv_dict_size_limit;
  
- extern volatile ibool srv_io_pattern;
-diff -ruN a/innobase/include/trx0sys.h b/innobase/include/trx0sys.h
---- a/innobase/include/trx0sys.h       2009-05-06 15:35:46.000000000 +0900
-+++ b/innobase/include/trx0sys.h       2009-05-06 14:52:00.000000000 +0900
+diff -r 85e7025cf2d1 innobase/include/trx0sys.h
+--- a/innobase/include/trx0sys.h       Fri Jul 03 15:41:41 2009 -0700
++++ b/innobase/include/trx0sys.h       Fri Jul 03 15:41:47 2009 -0700
 @@ -105,6 +105,13 @@
  void
  trx_sys_create(void);
@@ -27,21 +27,21 @@ diff -ruN a/innobase/include/trx0sys.h b/innobase/include/trx0sys.h
  /********************************************************************
  Looks for a free slot for a rollback segment in the trx system file copy. */
  
-diff -ruN a/innobase/srv/srv0srv.c b/innobase/srv/srv0srv.c
---- a/innobase/srv/srv0srv.c   2009-05-06 15:35:46.000000000 +0900
-+++ b/innobase/srv/srv0srv.c   2009-05-06 13:38:23.000000000 +0900
-@@ -347,6 +347,8 @@
- uint  srv_read_ahead = 3; /* 1: random  2: linear  3: Both */
- ulint srv_adaptive_checkpoint = 0; /* 0:disable 1:enable */
+diff -r 85e7025cf2d1 innobase/srv/srv0srv.c
+--- a/innobase/srv/srv0srv.c   Fri Jul 03 15:41:41 2009 -0700
++++ b/innobase/srv/srv0srv.c   Fri Jul 03 15:41:47 2009 -0700
+@@ -352,6 +352,8 @@
  
-+ulint srv_extra_rsegments = 0; /* extra rseg for users */
+ uint  srv_read_ahead = 3; /* 1: random  2: linear  3: Both */
+ uint  srv_adaptive_checkpoint = 0; /* 0: none  1: reflex  2: estimate */
 +
++ulint srv_extra_rsegments = 0; /* extra rseg for users */
  ulint srv_dict_size_limit = 0;
  
- volatile ibool srv_io_pattern = FALSE;
-diff -ruN a/innobase/srv/srv0start.c b/innobase/srv/srv0start.c
---- a/innobase/srv/srv0start.c 2009-05-06 15:35:46.000000000 +0900
-+++ b/innobase/srv/srv0start.c 2009-05-06 14:54:43.000000000 +0900
+diff -r 85e7025cf2d1 innobase/srv/srv0start.c
+--- a/innobase/srv/srv0start.c Fri Jul 03 15:41:41 2009 -0700
++++ b/innobase/srv/srv0start.c Fri Jul 03 15:41:47 2009 -0700
 @@ -1418,6 +1418,8 @@
                dict_create();
                  srv_startup_is_before_trx_rollback_phase = FALSE;
@@ -51,9 +51,9 @@ diff -ruN a/innobase/srv/srv0start.c b/innobase/srv/srv0start.c
  #ifdef UNIV_LOG_ARCHIVE
        } else if (srv_archive_recovery) {
                fprintf(stderr,
-diff -ruN a/innobase/trx/trx0sys.c b/innobase/trx/trx0sys.c
---- a/innobase/trx/trx0sys.c   2009-05-06 15:35:46.000000000 +0900
-+++ b/innobase/trx/trx0sys.c   2009-05-06 14:54:02.000000000 +0900
+diff -r 85e7025cf2d1 innobase/trx/trx0sys.c
+--- a/innobase/trx/trx0sys.c   Fri Jul 03 15:41:41 2009 -0700
++++ b/innobase/trx/trx0sys.c   Fri Jul 03 15:41:47 2009 -0700
 @@ -944,3 +944,28 @@
  
        trx_sys_init_at_db_start();
@@ -83,9 +83,9 @@ diff -ruN a/innobase/trx/trx0sys.c b/innobase/trx/trx0sys.c
 +      }
 +      mtr_commit(&mtr);
 +}
-diff -ruN a/patch_info/innodb_extra_rseg.info b/patch_info/innodb_extra_rseg.info
---- /dev/null  1970-01-01 09:00:00.000000000 +0900
-+++ b/patch_info/innodb_extra_rseg.info        2009-05-06 14:49:48.000000000 +0900
+diff -r 85e7025cf2d1 patch_info/innodb_extra_rseg.info
+--- /dev/null  Thu Jan 01 00:00:00 1970 +0000
++++ b/patch_info/innodb_extra_rseg.info        Fri Jul 03 15:41:47 2009 -0700
 @@ -0,0 +1,6 @@
 +File=innodb_extra_rseg.patch
 +Name=allow to create extra rollback segments
@@ -93,9 +93,9 @@ diff -ruN a/patch_info/innodb_extra_rseg.info b/patch_info/innodb_extra_rseg.inf
 +Author=Percona <info@percona.com>
 +License=GPL
 +Comment
-diff -ruN a/sql/ha_innodb.cc b/sql/ha_innodb.cc
---- a/sql/ha_innodb.cc 2009-05-06 15:35:46.000000000 +0900
-+++ b/sql/ha_innodb.cc 2009-05-06 15:27:49.000000000 +0900
+diff -r 85e7025cf2d1 sql/ha_innodb.cc
+--- a/sql/ha_innodb.cc Fri Jul 03 15:41:41 2009 -0700
++++ b/sql/ha_innodb.cc Fri Jul 03 15:41:47 2009 -0700
 @@ -152,6 +152,7 @@
       innobase_open_files;
  
@@ -104,7 +104,7 @@ diff -ruN a/sql/ha_innodb.cc b/sql/ha_innodb.cc
  longlong innobase_buffer_pool_size, innobase_log_file_size;
  
  /* The default values for the following char* start-up parameters
-@@ -1507,6 +1508,8 @@
+@@ -1521,6 +1522,8 @@
        srv_n_read_io_threads = (ulint) innobase_read_io_threads;
        srv_n_write_io_threads = (ulint) innobase_write_io_threads;
  
@@ -113,9 +113,9 @@ diff -ruN a/sql/ha_innodb.cc b/sql/ha_innodb.cc
        srv_lock_wait_timeout = (ulint) innobase_lock_wait_timeout;
        srv_force_recovery = (ulint) innobase_force_recovery;
  
-diff -ruN a/sql/ha_innodb.h b/sql/ha_innodb.h
---- a/sql/ha_innodb.h  2009-05-06 15:35:46.000000000 +0900
-+++ b/sql/ha_innodb.h  2009-05-06 13:51:35.000000000 +0900
+diff -r 85e7025cf2d1 sql/ha_innodb.h
+--- a/sql/ha_innodb.h  Fri Jul 03 15:41:41 2009 -0700
++++ b/sql/ha_innodb.h  Fri Jul 03 15:41:47 2009 -0700
 @@ -205,6 +205,7 @@
  extern long innobase_buffer_pool_awe_mem_mb;
  extern long innobase_file_io_threads, innobase_lock_wait_timeout;
@@ -124,21 +124,21 @@ diff -ruN a/sql/ha_innodb.h b/sql/ha_innodb.h
  extern long innobase_force_recovery;
  extern long innobase_open_files;
  extern char *innobase_data_home_dir, *innobase_data_file_path;
-diff -ruN a/sql/mysqld.cc b/sql/mysqld.cc
---- a/sql/mysqld.cc    2009-05-06 15:35:46.000000000 +0900
-+++ b/sql/mysqld.cc    2009-05-06 14:12:05.000000000 +0900
-@@ -5096,6 +5096,7 @@
+diff -r 85e7025cf2d1 sql/mysqld.cc
+--- a/sql/mysqld.cc    Fri Jul 03 15:41:41 2009 -0700
++++ b/sql/mysqld.cc    Fri Jul 03 15:41:47 2009 -0700
+@@ -5101,6 +5101,7 @@
    OPT_INNODB_ADAPTIVE_CHECKPOINT,
    OPT_INNODB_READ_IO_THREADS,
    OPT_INNODB_WRITE_IO_THREADS,
 +  OPT_INNODB_EXTRA_RSEGMENTS,
    OPT_INNODB_DICT_SIZE_LIMIT,
    OPT_INNODB_ADAPTIVE_HASH_INDEX,
-   OPT_RPL_MIRROR_BINLOG,
-@@ -5454,6 +5455,10 @@
+   OPT_FEDERATED,
+@@ -5465,6 +5466,10 @@
     "Number of background write I/O threads in InnoDB.",
     (gptr*) &innobase_write_io_threads, (gptr*) &innobase_write_io_threads,
-    0, GET_LONG, REQUIRED_ARG, 1, 1, 64, 0, 0, 0},
+    0, GET_LONG, REQUIRED_ARG, 8, 1, 64, 0, 0, 0},
 +  {"innodb_extra_rsegments", OPT_INNODB_EXTRA_RSEGMENTS,
 +   "Number of extra user rollback segments when create new database.",
 +   (gptr*) &innobase_extra_rsegments, (gptr*) &innobase_extra_rsegments,
@@ -146,10 +146,10 @@ diff -ruN a/sql/mysqld.cc b/sql/mysqld.cc
    {"innodb_dict_size_limit", OPT_INNODB_DICT_SIZE_LIMIT,
     "Limit the allocated memory for dictionary cache. (0: unlimited)",
     (gptr*) &srv_dict_size_limit, (gptr*) &srv_dict_size_limit, 0,
-diff -ruN a/sql/set_var.cc b/sql/set_var.cc
---- a/sql/set_var.cc   2009-05-06 15:35:46.000000000 +0900
-+++ b/sql/set_var.cc   2009-05-06 14:13:24.000000000 +0900
-@@ -1063,6 +1063,7 @@
+diff -r 85e7025cf2d1 sql/set_var.cc
+--- a/sql/set_var.cc   Fri Jul 03 15:41:41 2009 -0700
++++ b/sql/set_var.cc   Fri Jul 03 15:41:47 2009 -0700
+@@ -1087,6 +1087,7 @@
    {sys_innodb_adaptive_checkpoint.name, (char*) &sys_innodb_adaptive_checkpoint, SHOW_SYS},
    {"innodb_read_io_threads", (char*) &innobase_read_io_threads, SHOW_LONG},
    {"innodb_write_io_threads", (char*) &innobase_write_io_threads, SHOW_LONG},
@@ -157,9 +157,9 @@ diff -ruN a/sql/set_var.cc b/sql/set_var.cc
    {sys_innodb_dict_size_limit.name, (char*) &sys_innodb_dict_size_limit, SHOW_SYS},
    {sys_innodb_io_pattern_trace.name, (char*) &sys_innodb_io_pattern_trace, SHOW_SYS},
    {sys_innodb_io_pattern_trace_running.name, (char*) &sys_innodb_io_pattern_trace_running, SHOW_SYS},
-diff -ruN a/sql/sql_show.cc b/sql/sql_show.cc
---- a/sql/sql_show.cc  2009-05-06 15:35:46.000000000 +0900
-+++ b/sql/sql_show.cc  2009-05-06 15:29:47.000000000 +0900
+diff -r 85e7025cf2d1 sql/sql_show.cc
+--- a/sql/sql_show.cc  Fri Jul 03 15:41:41 2009 -0700
++++ b/sql/sql_show.cc  Fri Jul 03 15:41:47 2009 -0700
 @@ -39,6 +39,8 @@
  #include "srv0srv.h"
  #include "buf0buf.h"
@@ -169,7 +169,7 @@ diff -ruN a/sql/sql_show.cc b/sql/sql_show.cc
  }
  /* We need to undef it in InnoDB */
  #undef byte
-@@ -4160,6 +4162,45 @@
+@@ -4180,6 +4182,45 @@
    DBUG_RETURN(returnable);
  }
  
@@ -215,10 +215,12 @@ diff -ruN a/sql/sql_show.cc b/sql/sql_show.cc
  /*
    Find schema_tables elment by name
  
-@@ -4978,6 +5019,16 @@
+@@ -4996,6 +5037,16 @@
+   {"INDEX_NAME", 32, MYSQL_TYPE_STRING, 0, 0, "index name"},
+   {"N_READ", 11, MYSQL_TYPE_LONG, 0, 0, "read ios"},
    {"N_WRITE", 11, MYSQL_TYPE_LONG, 0, 0, "write ios"},
-   {0, 0, MYSQL_TYPE_STRING, 0, 0, 0}
- };
++  {0, 0, MYSQL_TYPE_STRING, 0, 0, 0}
++};
 +
 +ST_FIELD_INFO innodb_rseg_fields_info[]=
 +{
@@ -227,12 +229,10 @@ diff -ruN a/sql/sql_show.cc b/sql/sql_show.cc
 +  {"PAGE_NO", MY_INT64_NUM_DECIMAL_DIGITS, MYSQL_TYPE_LONG, 0, 0, ""},
 +  {"MAX_SIZE", MY_INT64_NUM_DECIMAL_DIGITS, MYSQL_TYPE_LONG, 0, 0, ""},
 +  {"CURR_SIZE", MY_INT64_NUM_DECIMAL_DIGITS, MYSQL_TYPE_LONG, 0, 0, ""},
-+  {0, 0, MYSQL_TYPE_STRING, 0, 0, 0}
-+};
+   {0, 0, MYSQL_TYPE_STRING, 0, 0, 0}
+ };
  #endif
- ST_FIELD_INFO variables_fields_info[]=
-@@ -5157,6 +5208,8 @@
+@@ -5177,6 +5228,8 @@
  #ifdef HAVE_INNOBASE_DB
    {"INNODB_IO_PATTERN", innodb_io_pattern_field_info, create_schema_table,
      innodb_io_pattern_fill_table, 0, 0, -1, -1, 0},
index 637a7d696dbec6b613c48349f4d97edee3e925be..2961b78390aaea9b912cf7063eeac3279da02586 100644 (file)
@@ -1,6 +1,6 @@
-diff -r 61031ebb48ce innobase/buf/buf0flu.c
---- a/innobase/buf/buf0flu.c   Mon Nov 03 05:07:46 2008 -0800
-+++ b/innobase/buf/buf0flu.c   Mon Nov 03 05:07:56 2008 -0800
+diff -r ef44d8017b6b innobase/buf/buf0flu.c
+--- a/innobase/buf/buf0flu.c   Fri Jul 03 15:41:25 2009 -0700
++++ b/innobase/buf/buf0flu.c   Fri Jul 03 15:41:32 2009 -0700
 @@ -341,7 +341,7 @@
  
        /* Now flush the doublewrite buffer data to disk */
@@ -29,9 +29,9 @@ diff -r 61031ebb48ce innobase/buf/buf0flu.c
  #endif        
        buf_flush_init_for_writing(block->frame, block->newest_modification,
                                                block->space, block->offset);
-diff -r 61031ebb48ce innobase/fil/fil0fil.c
---- a/innobase/fil/fil0fil.c   Mon Nov 03 05:07:46 2008 -0800
-+++ b/innobase/fil/fil0fil.c   Mon Nov 03 05:07:56 2008 -0800
+diff -r ef44d8017b6b innobase/fil/fil0fil.c
+--- a/innobase/fil/fil0fil.c   Fri Jul 03 15:41:25 2009 -0700
++++ b/innobase/fil/fil0fil.c   Fri Jul 03 15:41:32 2009 -0700
 @@ -245,6 +245,7 @@
                                        request */
        UT_LIST_BASE_NODE_T(fil_space_t) space_list;
@@ -103,7 +103,7 @@ diff -r 61031ebb48ce innobase/fil/fil0fil.c
  
        return(success);
  }
-@@ -4166,8 +4187,9 @@
+@@ -4167,8 +4188,9 @@
  void
  fil_flush(
  /*======*/
@@ -114,7 +114,7 @@ diff -r 61031ebb48ce innobase/fil/fil0fil.c
  {
        fil_system_t*   system  = fil_system;
        fil_space_t*    space;
-@@ -4176,7 +4198,7 @@
+@@ -4177,7 +4199,7 @@
        ib_longlong     old_mod_counter;
  
        mutex_enter(&(system->mutex));
@@ -123,7 +123,7 @@ diff -r 61031ebb48ce innobase/fil/fil0fil.c
        HASH_SEARCH(hash, system->spaces, space_id, space,
                                                        space->id == space_id);
        if (!space || space->is_being_deleted) {
-@@ -4281,7 +4303,8 @@
+@@ -4282,7 +4304,8 @@
  void
  fil_flush_file_spaces(
  /*==================*/
@@ -133,7 +133,7 @@ diff -r 61031ebb48ce innobase/fil/fil0fil.c
  {
        fil_system_t*   system  = fil_system;
        fil_space_t*    space;
-@@ -4322,7 +4345,7 @@
+@@ -4323,7 +4346,7 @@
        a non-existing space id. */
        for (i = 0; i < n_space_ids; i++) {
  
@@ -142,9 +142,9 @@ diff -r 61031ebb48ce innobase/fil/fil0fil.c
        }
  
        mem_free(space_ids);
-diff -r 61031ebb48ce innobase/include/fil0fil.h
---- a/innobase/include/fil0fil.h       Mon Nov 03 05:07:46 2008 -0800
-+++ b/innobase/include/fil0fil.h       Mon Nov 03 05:07:56 2008 -0800
+diff -r ef44d8017b6b innobase/include/fil0fil.h
+--- a/innobase/include/fil0fil.h       Fri Jul 03 15:41:25 2009 -0700
++++ b/innobase/include/fil0fil.h       Fri Jul 03 15:41:32 2009 -0700
 @@ -197,6 +197,13 @@
  fil_init(
  /*=====*/
@@ -159,7 +159,7 @@ diff -r 61031ebb48ce innobase/include/fil0fil.h
  /***********************************************************************
  Opens all log files and system tablespace data files. They stay open until the
  database server shutdown. This should be called at a server startup after the
-@@ -621,14 +628,26 @@
+@@ -625,14 +632,26 @@
        ulint   segment);       /* in: the number of the segment in the aio
                                array to wait for */ 
  /**************************************************************************
@@ -187,7 +187,7 @@ diff -r 61031ebb48ce innobase/include/fil0fil.h
  /**************************************************************************
  Flushes to disk writes in file spaces of the given type possibly cached by
  the OS. */
-@@ -636,7 +655,8 @@
+@@ -640,7 +659,8 @@
  void
  fil_flush_file_spaces(
  /*==================*/
@@ -197,9 +197,9 @@ diff -r 61031ebb48ce innobase/include/fil0fil.h
  /**********************************************************************
  Checks the consistency of the tablespace cache. */
  
-diff -r 61031ebb48ce innobase/include/log0log.h
---- a/innobase/include/log0log.h       Mon Nov 03 05:07:46 2008 -0800
-+++ b/innobase/include/log0log.h       Mon Nov 03 05:07:56 2008 -0800
+diff -r ef44d8017b6b innobase/include/log0log.h
+--- a/innobase/include/log0log.h       Fri Jul 03 15:41:25 2009 -0700
++++ b/innobase/include/log0log.h       Fri Jul 03 15:41:32 2009 -0700
 @@ -146,6 +146,22 @@
  log_io_complete(
  /*============*/
@@ -247,8 +247,8 @@ diff -r 61031ebb48ce innobase/include/log0log.h
 +log_buffer_flush_maybe_sync(void);
  /*==========================*/
  /********************************************************************
- Advances the smallest lsn for which there are unflushed dirty blocks in the
-@@ -744,6 +767,12 @@
+ Flushes the log buffer. Forces it to disk depending on the value of
+@@ -751,6 +774,12 @@
                                        AND flushed to disk */
        ulint           n_pending_writes;/* number of currently pending flushes
                                        or writes */
@@ -261,9 +261,9 @@ diff -r 61031ebb48ce innobase/include/log0log.h
        /* NOTE on the 'flush' in names of the fields below: starting from
        4.0.14, we separate the write of the log file and the actual fsync()
        or other method to flush it to disk. The names below shhould really
-diff -r 61031ebb48ce innobase/log/log0log.c
---- a/innobase/log/log0log.c   Mon Nov 03 05:07:46 2008 -0800
-+++ b/innobase/log/log0log.c   Mon Nov 03 05:07:56 2008 -0800
+diff -r ef44d8017b6b innobase/log/log0log.c
+--- a/innobase/log/log0log.c   Fri Jul 03 15:41:25 2009 -0700
++++ b/innobase/log/log0log.c   Fri Jul 03 15:41:32 2009 -0700
 @@ -782,6 +782,15 @@
        log_sys->written_to_all_lsn = log_sys->lsn;
        
@@ -347,7 +347,7 @@ diff -r 61031ebb48ce innobase/log/log0log.c
  }
  
  /********************************************************************
-@@ -1551,7 +1567,7 @@
+@@ -1574,7 +1590,7 @@
        mutex_exit(&(log->mutex));
  
        if (do_flush) {
@@ -356,7 +356,7 @@ diff -r 61031ebb48ce innobase/log/log0log.c
        }
  }
  
-@@ -1921,11 +1937,11 @@
+@@ -1944,11 +1960,11 @@
        }
  
        if (srv_unix_file_flush_method != SRV_UNIX_NOSYNC) {
@@ -370,7 +370,7 @@ diff -r 61031ebb48ce innobase/log/log0log.c
        oldest_lsn = log_buf_pool_get_oldest_modification();
  
        mutex_exit(&(log_sys->mutex));
-@@ -1938,7 +1954,8 @@
+@@ -1961,7 +1977,8 @@
        write-ahead-logging algorithm ensures that the log has been flushed
        up to oldest_lsn. */
  
@@ -380,7 +380,7 @@ diff -r 61031ebb48ce innobase/log/log0log.c
  
        mutex_enter(&(log_sys->mutex));
  
-@@ -2566,7 +2583,7 @@
+@@ -2589,7 +2606,7 @@
  
        mutex_exit(&(log_sys->mutex));
  
@@ -389,7 +389,7 @@ diff -r 61031ebb48ce innobase/log/log0log.c
        
        mutex_enter(&(log_sys->mutex));
        
-@@ -2647,7 +2664,8 @@
+@@ -2670,7 +2687,8 @@
  
                mutex_exit(&(log_sys->mutex));
        
@@ -399,7 +399,7 @@ diff -r 61031ebb48ce innobase/log/log0log.c
  
                calc_new_limit = FALSE;
  
-@@ -3184,8 +3202,8 @@
+@@ -3207,8 +3225,8 @@
        }
        mutex_exit(&kernel_mutex);
  
@@ -410,7 +410,7 @@ diff -r 61031ebb48ce innobase/log/log0log.c
  
        /* The call fil_write_flushed_lsn_to_data_files() will pass the buffer
        pool: therefore it is essential that the buffer pool has been
-@@ -3218,7 +3236,7 @@
+@@ -3241,7 +3259,7 @@
  
                fil_write_flushed_lsn_to_data_files(lsn, arch_log_no);
  
@@ -419,7 +419,7 @@ diff -r 61031ebb48ce innobase/log/log0log.c
  
        fil_close_all_files();
  
-@@ -3331,15 +3349,45 @@
+@@ -3363,15 +3381,45 @@
        time_elapsed = 0.001 + difftime(current_time,
                                        log_sys->last_printout_time);
        fprintf(file,
@@ -471,10 +471,10 @@ diff -r 61031ebb48ce innobase/log/log0log.c
  
        mutex_exit(&(log_sys->mutex));
  }
-diff -r 61031ebb48ce innobase/srv/srv0srv.c
---- a/innobase/srv/srv0srv.c   Mon Nov 03 05:07:46 2008 -0800
-+++ b/innobase/srv/srv0srv.c   Mon Nov 03 05:07:56 2008 -0800
-@@ -1638,6 +1638,12 @@
+diff -r ef44d8017b6b innobase/srv/srv0srv.c
+--- a/innobase/srv/srv0srv.c   Fri Jul 03 15:41:25 2009 -0700
++++ b/innobase/srv/srv0srv.c   Fri Jul 03 15:41:32 2009 -0700
+@@ -1698,6 +1698,12 @@
                (ulong)time_elapsed);
  
        fputs("----------\n"
@@ -487,9 +487,9 @@ diff -r 61031ebb48ce innobase/srv/srv0srv.c
                "SEMAPHORES\n"
                "----------\n", file);
        sync_print(file);
-diff -r 61031ebb48ce innobase/trx/trx0sys.c
---- a/innobase/trx/trx0sys.c   Mon Nov 03 05:07:46 2008 -0800
-+++ b/innobase/trx/trx0sys.c   Mon Nov 03 05:07:56 2008 -0800
+diff -r ef44d8017b6b innobase/trx/trx0sys.c
+--- a/innobase/trx/trx0sys.c   Fri Jul 03 15:41:25 2009 -0700
++++ b/innobase/trx/trx0sys.c   Fri Jul 03 15:41:32 2009 -0700
 @@ -511,7 +511,7 @@
                page += UNIV_PAGE_SIZE;
        }
@@ -499,10 +499,10 @@ diff -r 61031ebb48ce innobase/trx/trx0sys.c
        
  leave_func:
        ut_free(unaligned_read_buf);
-diff -r 61031ebb48ce innobase/trx/trx0trx.c
---- a/innobase/trx/trx0trx.c   Mon Nov 03 05:07:46 2008 -0800
-+++ b/innobase/trx/trx0trx.c   Mon Nov 03 05:07:56 2008 -0800
-@@ -916,19 +916,21 @@
+diff -r ef44d8017b6b innobase/trx/trx0trx.c
+--- a/innobase/trx/trx0trx.c   Fri Jul 03 15:41:25 2009 -0700
++++ b/innobase/trx/trx0trx.c   Fri Jul 03 15:41:32 2009 -0700
+@@ -942,19 +942,21 @@
                          if (srv_unix_file_flush_method == SRV_UNIX_NOSYNC) {
                                /* Write the log but do not flush it to disk */
  
@@ -528,7 +528,7 @@ diff -r 61031ebb48ce innobase/trx/trx0trx.c
                  } else {
                          ut_error;
                  }
-@@ -1659,18 +1661,21 @@
+@@ -1701,18 +1703,21 @@
                  if (srv_unix_file_flush_method == SRV_UNIX_NOSYNC) {
                          /* Write the log but do not flush it to disk */
  
@@ -553,7 +553,7 @@ diff -r 61031ebb48ce innobase/trx/trx0trx.c
          } else {
                  ut_error;
          }
-@@ -1906,19 +1911,21 @@
+@@ -1948,19 +1953,21 @@
                        if (srv_unix_file_flush_method == SRV_UNIX_NOSYNC) {
                                /* Write the log but do not flush it to disk */
  
@@ -579,9 +579,9 @@ diff -r 61031ebb48ce innobase/trx/trx0trx.c
                  } else {
                          ut_error;
                  }
-diff -r 61031ebb48ce patch_info/innodb_fsync_source.info
+diff -r ef44d8017b6b patch_info/innodb_fsync_source.info
 --- /dev/null  Thu Jan 01 00:00:00 1970 +0000
-+++ b/patch_info/innodb_fsync_source.info      Mon Nov 03 05:07:56 2008 -0800
++++ b/patch_info/innodb_fsync_source.info      Fri Jul 03 15:41:32 2009 -0700
 @@ -0,0 +1,9 @@
 +File=innodb_fsync_source.patch
 +Name=Information of fsync callers in InnoDB
index 8247a32678f991cdf16c62fd714c3639929b1cce..aaef29a85f8b34ff8bb9f9bee3fc38cfeb4a74c7 100644 (file)
@@ -1,6 +1,6 @@
-diff -r ed298a6e5e10 innobase/buf/buf0flu.c
---- a/innobase/buf/buf0flu.c   Mon Jun 01 00:36:10 2009 -0700
-+++ b/innobase/buf/buf0flu.c   Mon Jun 01 00:36:16 2009 -0700
+diff -ruN a/innobase/buf/buf0flu.c b/innobase/buf/buf0flu.c
+--- a/innobase/buf/buf0flu.c   2009-05-08 06:12:03.000000000 +0900
++++ b/innobase/buf/buf0flu.c   2009-07-02 16:44:49.000000000 +0900
 @@ -898,10 +898,17 @@
  
                                old_page_count = page_count;
@@ -19,9 +19,9 @@ diff -r ed298a6e5e10 innobase/buf/buf0flu.c
                                /* fprintf(stderr,
                                "Flush type %lu, page no %lu, neighb %lu\n",
                                flush_type, offset,
-diff -r ed298a6e5e10 innobase/buf/buf0rea.c
---- a/innobase/buf/buf0rea.c   Mon Jun 01 00:36:10 2009 -0700
-+++ b/innobase/buf/buf0rea.c   Mon Jun 01 00:36:16 2009 -0700
+diff -ruN a/innobase/buf/buf0rea.c b/innobase/buf/buf0rea.c
+--- a/innobase/buf/buf0rea.c   2009-07-02 16:43:23.000000000 +0900
++++ b/innobase/buf/buf0rea.c   2009-07-02 16:44:49.000000000 +0900
 @@ -20,6 +20,7 @@
  #include "os0file.h"
  #include "srv0start.h"
@@ -52,9 +52,9 @@ diff -r ed298a6e5e10 innobase/buf/buf0rea.c
        if (srv_startup_is_before_trx_rollback_phase) {
                /* No read-ahead to avoid thread deadlocks */
                return(0);
-diff -r ed298a6e5e10 innobase/ibuf/ibuf0ibuf.c
---- a/innobase/ibuf/ibuf0ibuf.c        Mon Jun 01 00:36:10 2009 -0700
-+++ b/innobase/ibuf/ibuf0ibuf.c        Mon Jun 01 00:36:16 2009 -0700
+diff -ruN a/innobase/ibuf/ibuf0ibuf.c b/innobase/ibuf/ibuf0ibuf.c
+--- a/innobase/ibuf/ibuf0ibuf.c        2009-05-08 06:12:04.000000000 +0900
++++ b/innobase/ibuf/ibuf0ibuf.c        2009-07-02 16:44:49.000000000 +0900
 @@ -370,8 +370,9 @@
        grow in size, as the references on the upper levels of the tree can
        change */
@@ -81,9 +81,26 @@ diff -r ed298a6e5e10 innobase/ibuf/ibuf0ibuf.c
  
        sync = FALSE;
        
-diff -r ed298a6e5e10 innobase/include/os0file.h
---- a/innobase/include/os0file.h       Mon Jun 01 00:36:10 2009 -0700
-+++ b/innobase/include/os0file.h       Mon Jun 01 00:36:16 2009 -0700
+diff -ruN a/innobase/include/log0log.h b/innobase/include/log0log.h
+--- a/innobase/include/log0log.h       2009-05-08 06:12:06.000000000 +0900
++++ b/innobase/include/log0log.h       2009-07-02 16:44:49.000000000 +0900
+@@ -169,6 +169,13 @@
+ log_buffer_flush_to_disk(void);
+ /*==========================*/
+ /********************************************************************
++Flushes the log buffer. Forces it to disk depending on the value of
++the configuration parameter innodb_flush_log_at_trx_commit. */
++
++void
++log_buffer_flush_maybe_sync(void);
++/*=============================*/
++/********************************************************************
+ Advances the smallest lsn for which there are unflushed dirty blocks in the
+ buffer pool and also may make a new checkpoint. NOTE: this function may only
+ be called if the calling thread owns no synchronization objects! */
+diff -ruN a/innobase/include/os0file.h b/innobase/include/os0file.h
+--- a/innobase/include/os0file.h       2009-07-02 16:43:23.000000000 +0900
++++ b/innobase/include/os0file.h       2009-07-02 16:44:49.000000000 +0900
 @@ -551,8 +551,10 @@
  /*========*/
        ulint   n,              /* in: maximum number of pending aio operations
@@ -97,9 +114,9 @@ diff -r ed298a6e5e10 innobase/include/os0file.h
        ulint   n_slots_sync);  /* in: number of slots in the sync aio array */
  /***********************************************************************
  Requests an asynchronous i/o operation. */
-diff -r ed298a6e5e10 innobase/include/srv0srv.h
---- a/innobase/include/srv0srv.h       Mon Jun 01 00:36:10 2009 -0700
-+++ b/innobase/include/srv0srv.h       Mon Jun 01 00:36:16 2009 -0700
+diff -ruN a/innobase/include/srv0srv.h b/innobase/include/srv0srv.h
+--- a/innobase/include/srv0srv.h       2009-07-02 16:43:23.000000000 +0900
++++ b/innobase/include/srv0srv.h       2009-07-02 18:02:38.000000000 +0900
 @@ -89,6 +89,8 @@
  extern ulint  srv_lock_table_size;
  
@@ -121,14 +138,44 @@ diff -r ed298a6e5e10 innobase/include/srv0srv.h
 +extern ulint  srv_flush_neighbor_pages;
 +extern ulint  srv_enable_unsafe_group_commit;
 +extern uint   srv_read_ahead;
-+extern ulint  srv_adaptive_checkpoint;
++extern uint   srv_adaptive_checkpoint;
  /*-------------------------------------------*/
  
  extern ulint  srv_n_rows_inserted;
-diff -r ed298a6e5e10 innobase/log/log0log.c
---- a/innobase/log/log0log.c   Mon Jun 01 00:36:10 2009 -0700
-+++ b/innobase/log/log0log.c   Mon Jun 01 00:36:16 2009 -0700
-@@ -3326,6 +3326,15 @@
+diff -ruN a/innobase/log/log0log.c b/innobase/log/log0log.c
+--- a/innobase/log/log0log.c   2009-05-08 06:12:10.000000000 +0900
++++ b/innobase/log/log0log.c   2009-07-02 16:44:49.000000000 +0900
+@@ -1524,6 +1524,29 @@
+ }
+ /********************************************************************
++Flush the log buffer. Force it to disk depending on the value of
++innodb_flush_log_at_trx_commit. */
++
++void
++log_buffer_flush_maybe_sync(void)
++/*=============================*/
++{
++      dulint  lsn;
++
++      mutex_enter(&(log_sys->mutex));
++
++      lsn = log_sys->lsn;
++
++      mutex_exit(&(log_sys->mutex));
++
++      /* Force log buffer to disk when innodb_flush_log_at_trx_commit = 1. */
++      log_write_up_to(lsn, LOG_WAIT_ALL_GROUPS,
++                      srv_flush_log_at_trx_commit == 1 ? TRUE : FALSE,
++                      srv_flush_log_at_trx_commit == 1 ?
++                              LOG_WRITE_FROM_BACKGROUND_SYNC :
++                              LOG_WRITE_FROM_BACKGROUND_ASYNC);
++}
++/********************************************************************
+ Tries to establish a big enough margin of free space in the log buffer, such
+ that a new log entry can be catenated without an immediate need for a flush. */
+ static
+@@ -3326,6 +3349,15 @@
                        (ulong) ut_dulint_get_high(log_sys->last_checkpoint_lsn),
                        (ulong) ut_dulint_get_low(log_sys->last_checkpoint_lsn));
  
@@ -144,10 +191,98 @@ diff -r ed298a6e5e10 innobase/log/log0log.c
        current_time = time(NULL);
                        
        time_elapsed = 0.001 + difftime(current_time,
-diff -r ed298a6e5e10 innobase/os/os0file.c
---- a/innobase/os/os0file.c    Mon Jun 01 00:36:10 2009 -0700
-+++ b/innobase/os/os0file.c    Mon Jun 01 00:36:16 2009 -0700
-@@ -2878,8 +2878,10 @@
+diff -ruN a/innobase/os/os0file.c b/innobase/os/os0file.c
+--- a/innobase/os/os0file.c    2009-07-02 16:43:23.000000000 +0900
++++ b/innobase/os/os0file.c    2009-07-02 16:44:49.000000000 +0900
+@@ -66,6 +66,28 @@
+ ibool os_aio_print_debug      = FALSE;
++/* State for the state of an IO request in simulated AIO.
++   Protocol for simulated aio:
++     client requests IO: find slot with reserved = FALSE. Add entry with
++                         status = OS_AIO_NOT_ISSUED.
++     IO thread wakes: find adjacent slots with reserved = TRUE and status =
++                      OS_AIO_NOT_ISSUED. Change status for slots to
++                      OS_AIO_ISSUED.
++     IO operation completes: set status for slots to OS_AIO_DONE. set status
++                             for the first slot to OS_AIO_CLAIMED and return
++                             result for that slot.
++   When there are multiple read and write threads, they all compete to execute
++   the requests in the array (os_aio_array_t). This avoids the need to load
++   balance requests at the time the request is made at the cost of waking all
++   threads when a request is available.
++*/
++typedef enum {
++      OS_AIO_NOT_ISSUED, /* Available to be processed by an IO thread. */
++      OS_AIO_ISSUED,     /* Being processed by an IO thread. */
++      OS_AIO_DONE,       /* Request processed. */
++      OS_AIO_CLAIMED     /* Result being returned to client. */
++} os_aio_status;
++
+ /* The aio array slot structure */
+ typedef struct os_aio_slot_struct     os_aio_slot_t;
+@@ -74,6 +96,8 @@
+       ulint           pos;            /* index of the slot in the aio
+                                       array */
+       ibool           reserved;       /* TRUE if this slot is reserved */
++      os_aio_status   status;         /* Status for current request. Valid when reserved
++                                      is TRUE. Used only in simulated aio. */
+       time_t          reservation_time;/* time when reserved */
+       ulint           len;            /* length of the block to read or
+                                       write */
+@@ -84,11 +108,11 @@
+       ulint           offset_high;    /* 32 high bits of file offset */
+       os_file_t       file;           /* file where to read or write */
+       const char*     name;           /* file name or path */
+-      ibool           io_already_done;/* used only in simulated aio:
+-                                      TRUE if the physical i/o already
+-                                      made and only the slot message
+-                                      needs to be passed to the caller
+-                                      of os_aio_simulated_handle */
++//    ibool           io_already_done;/* used only in simulated aio:
++//                                    TRUE if the physical i/o already
++//                                    made and only the slot message
++//                                    needs to be passed to the caller
++//                                    of os_aio_simulated_handle */
+       fil_node_t*     message1;       /* message which is given by the */
+       void*           message2;       /* the requester of an aio operation
+                                       and which can be used to identify
+@@ -137,6 +161,13 @@
+ /* Array of events used in simulated aio */
+ os_event_t*   os_aio_segment_wait_events      = NULL;
++/* Number for the first global segment for reading. */
++const ulint os_aio_first_read_segment = 2;
++
++/* Number for the first global segment for writing. Set to
++2 + os_aio_read_write_threads. */
++ulint os_aio_first_write_segment = 0;
++
+ /* The aio arrays for non-ibuf i/o and ibuf i/o, as well as sync aio. These
+ are NULL when the module has not yet been initialized. */
+ static os_aio_array_t*        os_aio_read_array       = NULL;
+@@ -145,11 +176,17 @@
+ static os_aio_array_t*        os_aio_log_array        = NULL;
+ static os_aio_array_t*        os_aio_sync_array       = NULL;
++/* Per thread buffer used for merged IO requests. Used by
++os_aio_simulated_handle so that a buffer doesn't have to be allocated
++for each request. */
++static char* os_aio_thread_buffer[SRV_MAX_N_IO_THREADS];
++static ulint os_aio_thread_buffer_size[SRV_MAX_N_IO_THREADS];
++
+ static ulint  os_aio_n_segments       = ULINT_UNDEFINED;
+ /* If the following is TRUE, read i/o handler threads try to
+ wait until a batch of new read requests have been posted */
+-static ibool  os_aio_recommend_sleep_for_read_threads = FALSE;
++static volatile ibool os_aio_recommend_sleep_for_read_threads = FALSE;
+ ulint os_n_file_reads         = 0;
+ ulint os_bytes_read_since_printout = 0;
+@@ -2878,8 +2915,10 @@
  /*========*/
        ulint   n,              /* in: maximum number of pending aio operations
                                allowed; n must be divisible by n_segments */
@@ -160,7 +295,7 @@ diff -r ed298a6e5e10 innobase/os/os0file.c
        ulint   n_slots_sync)   /* in: number of slots in the sync aio array */
  {
        ulint   n_read_segs;
-@@ -2889,6 +2891,8 @@
+@@ -2889,6 +2928,8 @@
  #ifdef POSIX_ASYNC_IO
        sigset_t   sigset;
  #endif
@@ -169,7 +304,12 @@ diff -r ed298a6e5e10 innobase/os/os0file.c
        ut_ad(n % n_segments == 0);
        ut_ad(n_segments >= 4);
  
-@@ -2899,8 +2903,8 @@
+@@ -2896,14 +2937,17 @@
+       for (i = 0; i < n_segments; i++) {
+               srv_set_io_thread_op_info(i, "not started yet");
++              os_aio_thread_buffer[i] = 0;
++              os_aio_thread_buffer_size[i] = 0;
        }
  
        n_per_seg = n / n_segments;
@@ -180,7 +320,28 @@ diff -r ed298a6e5e10 innobase/os/os0file.c
        
        /* fprintf(stderr, "Array n per seg %lu\n", n_per_seg); */
  
-@@ -3181,6 +3185,13 @@
++      os_aio_first_write_segment = os_aio_first_read_segment + n_read_threads;
+       os_aio_ibuf_array = os_aio_array_create(n_per_seg, 1);
+       srv_io_thread_function[0] = "insert buffer thread";
+@@ -2912,14 +2956,14 @@
+       srv_io_thread_function[1] = "log thread";
+-      os_aio_read_array = os_aio_array_create(n_read_segs * n_per_seg,
++      os_aio_read_array = os_aio_array_create(n_per_seg,
+                                                       n_read_segs);
+       for (i = 2; i < 2 + n_read_segs; i++) {
+               ut_a(i < SRV_MAX_N_IO_THREADS);
+               srv_io_thread_function[i] = "read thread";
+       }
+-      os_aio_write_array = os_aio_array_create(n_write_segs * n_per_seg,
++      os_aio_write_array = os_aio_array_create(n_per_seg,
+                                                       n_write_segs);
+       for (i = 2 + n_read_segs; i < n_segments; i++) {
+               ut_a(i < SRV_MAX_N_IO_THREADS);
+@@ -3181,6 +3225,13 @@
        struct aiocb*   control;
  #endif
        ulint           i;
@@ -194,7 +355,7 @@ diff -r ed298a6e5e10 innobase/os/os0file.c
  loop:
        os_mutex_enter(array->mutex);
  
-@@ -3199,6 +3210,16 @@
+@@ -3199,6 +3250,16 @@
                goto loop;
        }
  
@@ -211,7 +372,7 @@ diff -r ed298a6e5e10 innobase/os/os0file.c
        for (i = 0;; i++) {
                slot = os_aio_array_get_nth_slot(array, i);
  
-@@ -3206,6 +3227,7 @@
+@@ -3206,6 +3267,7 @@
                        break;
                }
        }
@@ -219,9 +380,330 @@ diff -r ed298a6e5e10 innobase/os/os0file.c
  
        array->n_reserved++;
  
-diff -r ed298a6e5e10 innobase/srv/srv0srv.c
---- a/innobase/srv/srv0srv.c   Mon Jun 01 00:36:10 2009 -0700
-+++ b/innobase/srv/srv0srv.c   Mon Jun 01 00:36:16 2009 -0700
+@@ -3228,7 +3290,8 @@
+       slot->buf      = buf;
+       slot->offset   = offset;
+       slot->offset_high = offset_high;
+-      slot->io_already_done = FALSE;
++//    slot->io_already_done = FALSE;
++      slot->status = OS_AIO_NOT_ISSUED;
+       
+ #ifdef WIN_ASYNC_IO           
+       control = &(slot->control);
+@@ -3281,6 +3344,7 @@
+       ut_ad(slot->reserved);
+       
+       slot->reserved = FALSE;
++      slot->status = OS_AIO_NOT_ISSUED;
+       array->n_reserved--;
+@@ -3317,16 +3381,18 @@
+       segment = os_aio_get_array_and_local_segment(&array, global_segment);
+-      n = array->n_slots / array->n_segments;
++      n = array->n_slots;
+       /* Look through n slots after the segment * n'th slot */
+       os_mutex_enter(array->mutex);
+       for (i = 0; i < n; i++) {
+-              slot = os_aio_array_get_nth_slot(array, i + segment * n);
++              slot = os_aio_array_get_nth_slot(array, i);
+-              if (slot->reserved) {
++              if (slot->reserved &&
++                  (slot->status == OS_AIO_NOT_ISSUED ||
++                   slot->status == OS_AIO_DONE)) {
+                       /* Found an i/o request */
+                       
+                       break;
+@@ -3336,7 +3402,25 @@
+       os_mutex_exit(array->mutex);
+       if (i < n) {
+-              os_event_set(os_aio_segment_wait_events[global_segment]);
++              if (array == os_aio_ibuf_array) {
++                      os_event_set(os_aio_segment_wait_events[0]);
++
++              } else if (array == os_aio_log_array) {
++                      os_event_set(os_aio_segment_wait_events[1]);
++
++              } else if (array == os_aio_read_array) {
++                      ulint   x;
++                      for (x = os_aio_first_read_segment; x < os_aio_first_write_segment; x++)
++                              os_event_set(os_aio_segment_wait_events[x]);
++
++              } else if (array == os_aio_write_array) {
++                      ulint   x;
++                      for (x = os_aio_first_write_segment; x < os_aio_n_segments; x++)
++                              os_event_set(os_aio_segment_wait_events[x]);
++
++              } else {
++                      ut_a(0);
++              }
+       }
+ }
+@@ -3347,8 +3431,6 @@
+ os_aio_simulated_wake_handler_threads(void)
+ /*=======================================*/
+ {
+-      ulint   i;
+-
+       if (os_aio_use_native_aio) {
+               /* We do not use simulated aio: do nothing */
+@@ -3357,9 +3439,10 @@
+       os_aio_recommend_sleep_for_read_threads = FALSE;
+-      for (i = 0; i < os_aio_n_segments; i++) {
+-              os_aio_simulated_wake_handler_thread(i);
+-      }
++      os_aio_simulated_wake_handler_thread(0);
++      os_aio_simulated_wake_handler_thread(1);
++      os_aio_simulated_wake_handler_thread(os_aio_first_read_segment);
++      os_aio_simulated_wake_handler_thread(os_aio_first_write_segment);
+ }
+ /**************************************************************************
+@@ -3640,7 +3723,7 @@
+       ut_ad(os_aio_validate());
+       ut_ad(segment < array->n_segments);
+-      n = array->n_slots / array->n_segments;
++      n = array->n_slots;
+       if (array == os_aio_sync_array) {
+               os_event_wait(os_aio_array_get_nth_slot(array, pos)->event);
+@@ -3648,12 +3731,12 @@
+       } else {
+               srv_set_io_thread_op_info(orig_seg, "wait Windows aio");
+               i = os_event_wait_multiple(n,
+-                              (array->native_events) + segment * n);
++                              (array->native_events));
+       }
+       os_mutex_enter(array->mutex);
+-      slot = os_aio_array_get_nth_slot(array, i + segment * n);
++      slot = os_aio_array_get_nth_slot(array, i);
+       ut_a(slot->reserved);
+@@ -3830,10 +3913,13 @@
+       os_aio_slot_t*  slot;
+       os_aio_slot_t*  slot2;
+       os_aio_slot_t*  consecutive_ios[OS_AIO_MERGE_N_CONSECUTIVE];
++      os_aio_slot_t*  lowest_request;
++      os_aio_slot_t*  oldest_request;
+       ulint           n_consecutive;
+       ulint           total_len;
+       ulint           offs;
+       ulint           lowest_offset;
++      ulint           oldest_offset;
+       ulint           biggest_age;
+       ulint           age;
+       byte*           combined_buf;
+@@ -3841,6 +3927,7 @@
+       ibool           ret;
+       ulint           n;
+       ulint           i;
++      time_t          now;
+       
+       segment = os_aio_get_array_and_local_segment(&array, global_segment);
+       
+@@ -3853,7 +3940,7 @@
+       ut_ad(os_aio_validate());
+       ut_ad(segment < array->n_segments);
+-      n = array->n_slots / array->n_segments;
++      n = array->n_slots;
+       /* Look through n slots after the segment * n'th slot */
+@@ -3875,9 +3962,9 @@
+       done */
+       
+       for (i = 0; i < n; i++) {
+-              slot = os_aio_array_get_nth_slot(array, i + segment * n);
++              slot = os_aio_array_get_nth_slot(array, i);
+-              if (slot->reserved && slot->io_already_done) {
++              if (slot->reserved && slot->status == OS_AIO_DONE) {
+                       if (os_aio_print_debug) {
+                               fprintf(stderr,
+@@ -3897,67 +3984,57 @@
+       then pick the one at the lowest offset. */
+       biggest_age = 0;
+-      lowest_offset = ULINT_MAX;
++      now = time(NULL);
++      oldest_request = lowest_request = NULL;
++      oldest_offset = lowest_offset = ULINT_MAX;
++      /* Find the oldest request and the request with the smallest offset */
+       for (i = 0; i < n; i++) {
+-              slot = os_aio_array_get_nth_slot(array, i + segment * n);
++              slot = os_aio_array_get_nth_slot(array, i);
+-              if (slot->reserved) {
+-                      age = (ulint)difftime(time(NULL),
+-                                              slot->reservation_time);
++              if (slot->reserved && slot->status == OS_AIO_NOT_ISSUED) {
++                      age = (ulint)difftime(now, slot->reservation_time);
+                       if ((age >= 2 && age > biggest_age)
+                           || (age >= 2 && age == biggest_age
+-                              && slot->offset < lowest_offset)) {
++                              && slot->offset < oldest_offset)) {
+                               /* Found an i/o request */
+-                              consecutive_ios[0] = slot;
+-
+-                              n_consecutive = 1;
+-
+                               biggest_age = age;
+-                              lowest_offset = slot->offset;
++                              oldest_request = slot;
++                              oldest_offset = slot->offset;
+                       }
+-              }
+-      }
+-
+-      if (n_consecutive == 0) {
+-              /* There were no old requests. Look for an i/o request at the
+-              lowest offset in the array (we ignore the high 32 bits of the
+-              offset in these heuristics) */
+-
+-              lowest_offset = ULINT_MAX;
+-      
+-              for (i = 0; i < n; i++) {
+-                      slot = os_aio_array_get_nth_slot(array,
+-                                                      i + segment * n);
+-
+-                      if (slot->reserved && slot->offset < lowest_offset) {
++                      /* Look for an i/o request at the lowest offset in the array
++                       * (we ignore the high 32 bits of the offset) */
++                      if (slot->offset < lowest_offset) {
+                               /* Found an i/o request */
+-                              consecutive_ios[0] = slot;
+-
+-                              n_consecutive = 1;
+-
++                              lowest_request = slot;
+                               lowest_offset = slot->offset;
+                       }
+               }
+       }
+-      if (n_consecutive == 0) {
++      if (!lowest_request && !oldest_request) {
+               /* No i/o requested at the moment */
+               goto wait_for_io;
+       }
+-      slot = consecutive_ios[0];
++      if (oldest_request) {
++              slot = oldest_request;
++      } else {
++              slot = lowest_request;
++      }
++      consecutive_ios[0] = slot;
++      n_consecutive = 1;
+       /* Check if there are several consecutive blocks to read or write */
+ consecutive_loop:     
+       for (i = 0; i < n; i++) {
+-              slot2 = os_aio_array_get_nth_slot(array, i + segment * n);
++              slot2 = os_aio_array_get_nth_slot(array, i);
+               if (slot2->reserved && slot2 != slot
+                   && slot2->offset == slot->offset + slot->len
+@@ -3965,7 +4042,8 @@
+                                               sum does not wrap over */
+                   && slot2->offset_high == slot->offset_high
+                   && slot2->type == slot->type
+-                  && slot2->file == slot->file) {
++                  && slot2->file == slot->file
++                  && slot2->status == OS_AIO_NOT_ISSUED) {
+                       /* Found a consecutive i/o request */
+@@ -3994,6 +4072,8 @@
+       
+       for (i = 0; i < n_consecutive; i++) {
+               total_len += consecutive_ios[i]->len;
++              ut_a(consecutive_ios[i]->status == OS_AIO_NOT_ISSUED);
++              consecutive_ios[i]->status = OS_AIO_ISSUED;
+       }
+       if (n_consecutive == 1) {
+@@ -4001,7 +4081,14 @@
+               combined_buf = slot->buf;
+               combined_buf2 = NULL;
+       } else {
+-              combined_buf2 = ut_malloc(total_len + UNIV_PAGE_SIZE);
++              if ((total_len + UNIV_PAGE_SIZE) > os_aio_thread_buffer_size[global_segment]) {
++                      if (os_aio_thread_buffer[global_segment])
++                              ut_free(os_aio_thread_buffer[global_segment]);
++
++                      os_aio_thread_buffer[global_segment] = ut_malloc(total_len + UNIV_PAGE_SIZE);
++                      os_aio_thread_buffer_size[global_segment] = total_len + UNIV_PAGE_SIZE;
++              }
++              combined_buf2 = os_aio_thread_buffer[global_segment];
+               ut_a(combined_buf2);
+@@ -4012,6 +4099,9 @@
+       this assumes that there is just one i/o-handler thread serving
+       a single segment of slots! */
++      ut_a(slot->reserved);
++      ut_a(slot->status == OS_AIO_ISSUED);
++
+       os_mutex_exit(array->mutex);
+       if (slot->type == OS_FILE_WRITE && n_consecutive > 1) {
+@@ -4081,16 +4171,13 @@
+               }
+       }
+-      if (combined_buf2) {
+-              ut_free(combined_buf2);
+-      }
+-
+       os_mutex_enter(array->mutex);
+       /* Mark the i/os done in slots */
+       for (i = 0; i < n_consecutive; i++) {
+-              consecutive_ios[i]->io_already_done = TRUE;
++              ut_a(consecutive_ios[i]->status == OS_AIO_ISSUED);
++              consecutive_ios[i]->status = OS_AIO_DONE;
+       }
+       /* We return the messages for the first slot now, and if there were
+@@ -4100,6 +4187,8 @@
+ slot_io_done:
+       ut_a(slot->reserved);
++      ut_a(slot->status == OS_AIO_DONE);
++      slot->status = OS_AIO_CLAIMED;
+       *message1 = slot->message1;
+       *message2 = slot->message2;
+diff -ruN a/innobase/srv/srv0srv.c b/innobase/srv/srv0srv.c
+--- a/innobase/srv/srv0srv.c   2009-07-02 16:43:23.000000000 +0900
++++ b/innobase/srv/srv0srv.c   2009-07-02 18:36:54.000000000 +0900
 @@ -167,6 +167,8 @@
  ulint srv_lock_table_size     = ULINT_MAX;
  
@@ -252,32 +734,69 @@ diff -r ed298a6e5e10 innobase/srv/srv0srv.c
 +ulint srv_enable_unsafe_group_commit = 0; /* 0:disable 1:enable */
 +
 +uint  srv_read_ahead = 3; /* 1: random  2: linear  3: Both */
-+ulint srv_adaptive_checkpoint = 0; /* 0:disable 1:enable */
++uint  srv_adaptive_checkpoint = 0; /* 0: none  1: reflex  2: estimate */
  /*-------------------------------------------*/
  ulong srv_n_spin_wait_rounds  = 20;
  ulong srv_n_free_tickets_to_enter = 500;
-@@ -2229,6 +2249,8 @@
+@@ -2228,6 +2248,10 @@
+       ulint           n_pend_ios;
        ibool           skip_sleep      = FALSE;
        ulint           i;
-       
-+      dulint          oldest_lsn;
++
++      dulint          lsn_old;
 +      
++      dulint          oldest_lsn;
+       
  #ifdef UNIV_DEBUG_THREAD_CREATION
        fprintf(stderr, "Master thread starts, id %lu\n",
-                             os_thread_pf(os_thread_get_curr_id()));
-@@ -2317,9 +2339,9 @@
+@@ -2244,6 +2268,9 @@
+       mutex_exit(&kernel_mutex);
++      mutex_enter(&(log_sys->mutex));
++      lsn_old = log_sys->lsn;
++      mutex_exit(&(log_sys->mutex));
+       os_event_set(srv_sys->operational);
+ loop:
+       /*****************************************************************/
+@@ -2279,6 +2306,18 @@
+               if (!skip_sleep) {
+                       os_thread_sleep(1000000);
++                      /*
++                      mutex_enter(&(log_sys->mutex));
++                      oldest_lsn = buf_pool_get_oldest_modification();
++                      dulint  lsn = log_sys->lsn;
++                      mutex_exit(&(log_sys->mutex));
++
++                      if (!ut_dulint_is_zero(oldest_lsn))
++                      fprintf(stderr,
++                              "InnoDB flush: age pct: %lu, lsn progress: %lu\n",
++                              ut_dulint_minus(lsn, oldest_lsn) * 100 / log_sys->max_checkpoint_age,
++                              ut_dulint_minus(lsn, lsn_old));
++                      */
+               }
+               skip_sleep = FALSE;
+@@ -2317,13 +2356,14 @@
                                                + log_sys->n_pending_writes;
                n_ios = log_sys->n_log_ios + buf_pool->n_pages_read
                                                + buf_pool->n_pages_written;
 -              if (n_pend_ios < 3 && (n_ios - n_ios_old < 5)) {
-+              if (n_pend_ios < 3 && (n_ios - n_ios_old < PCT_IO(5))) {
++              if (n_pend_ios < PCT_IO(3) && (n_ios - n_ios_old < PCT_IO(5))) {
                        srv_main_thread_op_info = "doing insert buffer merge";
 -                      ibuf_contract_for_n_pages(TRUE, 5);
 +                      ibuf_contract_for_n_pages(TRUE, PCT_IBUF_IO(5));
  
                        srv_main_thread_op_info = "flushing log";
  
-@@ -2332,7 +2354,7 @@
+-                      log_buffer_flush_to_disk();
++                      /* No fsync when srv_flush_log_at_trx_commit != 1 */
++                      log_buffer_flush_maybe_sync();
+               }
+               if (buf_get_modified_ratio_pct() >
+@@ -2332,7 +2372,7 @@
                        /* Try to keep the number of modified pages in the
                        buffer pool under the limit wished by the user */
                        
@@ -286,17 +805,20 @@ diff -r ed298a6e5e10 innobase/srv/srv0srv.c
                                                          ut_dulint_max);
  
                        /* If we had to do the flush, it may have taken
-@@ -2341,6 +2363,49 @@
+@@ -2341,6 +2381,140 @@
                        iteration of this loop. */
                             
                        skip_sleep = TRUE;
-+              } else if (srv_adaptive_checkpoint) {
++                      mutex_enter(&(log_sys->mutex));
++                      lsn_old = log_sys->lsn;
++                      mutex_exit(&(log_sys->mutex));
++              } else if (srv_adaptive_checkpoint == 1) {
 +
 +                      /* Try to keep modified age not to exceed
 +                      max_checkpoint_age * 7/8 line */
 +
 +                      mutex_enter(&(log_sys->mutex));
-+
++                      lsn_old = log_sys->lsn;
 +                      oldest_lsn = buf_pool_get_oldest_modification();
 +                      if (ut_dulint_is_zero(oldest_lsn)) {
 +
@@ -332,11 +854,99 @@ diff -r ed298a6e5e10 innobase/srv/srv0srv.c
 +                                      mutex_exit(&(log_sys->mutex));
 +                              }
 +                      }
++              } else if (srv_adaptive_checkpoint == 2) {
++
++                      /* Try to keep modified age not to exceed
++                      max_checkpoint_age * 7/8 line */
++
++                      mutex_enter(&(log_sys->mutex));
++
++                      oldest_lsn = buf_pool_get_oldest_modification();
++                      if (ut_dulint_is_zero(oldest_lsn)) {
++                              lsn_old = log_sys->lsn;
++                              mutex_exit(&(log_sys->mutex));
++
++                      } else {
++                              if (ut_dulint_minus(log_sys->lsn, oldest_lsn)
++                                  > (log_sys->max_checkpoint_age) - ((log_sys->max_checkpoint_age) / 8)) {
++                                      /* LOG_POOL_PREFLUSH_RATIO_ASYNC is exceeded. */
++                                      /* We should not flush from here. */
++                                      lsn_old = log_sys->lsn;
++                                      mutex_exit(&(log_sys->mutex));
++                              } else if (ut_dulint_minus(log_sys->lsn, oldest_lsn)
++                                         > (log_sys->max_checkpoint_age)/2 ) {
++
++                                      /* defence line (max_checkpoint_age * 1/2) */
++                                      dulint  lsn = log_sys->lsn;
 +
++                                      mutex_exit(&(log_sys->mutex));
++
++                                      ib_longlong level, bpl;
++                                      buf_block_t* bpage;
++
++                                      mutex_enter(&buf_pool->mutex);
++
++                                      level = 0;
++                                      bpage = UT_LIST_GET_FIRST(buf_pool->flush_list);
++
++                                      while (bpage != NULL) {
++                                              dulint  oldest_modification = bpage->oldest_modification;
++                                              if (!ut_dulint_is_zero(oldest_modification)) {
++                                                      level += log_sys->max_checkpoint_age
++                                                               - ut_dulint_minus(lsn, oldest_modification);
++                                              }
++                                              bpage = UT_LIST_GET_NEXT(flush_list, bpage);
++                                      }
++
++                                      if (level) {
++                                              bpl = ((ib_longlong) UT_LIST_GET_LEN(buf_pool->flush_list)
++                                                      * UT_LIST_GET_LEN(buf_pool->flush_list)
++                                                      * ut_dulint_minus(lsn, lsn_old)) / level;
++                                      } else {
++                                              bpl = 0;
++                                      }
++
++                                      mutex_exit(&buf_pool->mutex);
++
++                                      if (!srv_use_doublewrite_buf) {
++                                              /* flush is faster than when doublewrite */
++                                              bpl = (bpl * 3) / 4;
++                                      }
++
++                                      if(bpl) {
++retry_flush_batch:
++                                              n_pages_flushed = buf_flush_batch(BUF_FLUSH_LIST,
++                                                                      bpl,
++                                                                      ut_dulint_add(oldest_lsn,
++                                                                              ut_dulint_minus(lsn,
++                                                                                      lsn_old)));
++                                              if (n_pages_flushed == ULINT_UNDEFINED) {
++                                                      os_thread_sleep(5000);
++                                                      goto retry_flush_batch;
++                                              }
++                                      }
++
++                                      lsn_old = lsn;
++                                      /*
++                                      fprintf(stderr,
++                                              "InnoDB flush: age pct: %lu, lsn progress: %lu, blocks to flush:%llu\n",
++                                              ut_dulint_minus(lsn, oldest_lsn) * 100 / log_sys->max_checkpoint_age,
++                                              ut_dulint_minus(lsn, lsn_old), bpl);
++                                      */
++                              } else {
++                                      lsn_old = log_sys->lsn;
++                                      mutex_exit(&(log_sys->mutex));
++                              }
++                      }
++
++              } else {
++                      mutex_enter(&(log_sys->mutex));
++                      lsn_old = log_sys->lsn;
++                      mutex_exit(&(log_sys->mutex));
                }
  
                if (srv_activity_count == old_activity_count) {
-@@ -2367,10 +2432,10 @@
+@@ -2367,23 +2541,25 @@
        n_pend_ios = buf_get_n_pending_ios() + log_sys->n_pending_writes;
        n_ios = log_sys->n_log_ios + buf_pool->n_pages_read
                                                + buf_pool->n_pages_written;
@@ -348,8 +958,12 @@ diff -r ed298a6e5e10 innobase/srv/srv0srv.c
 +              buf_flush_batch(BUF_FLUSH_LIST, PCT_IO(100), ut_dulint_max);
  
                srv_main_thread_op_info = "flushing log";
-               log_buffer_flush_to_disk();
-@@ -2380,7 +2445,7 @@
+-              log_buffer_flush_to_disk();
++              /* No fsync when srv_flush_log_at_trx_commit != 1 */
++              log_buffer_flush_maybe_sync();
+       }
+       /* We run a batch of insert buffer merge every 10 seconds,
        even if the server were active */
  
        srv_main_thread_op_info = "doing insert buffer merge";
@@ -357,8 +971,13 @@ diff -r ed298a6e5e10 innobase/srv/srv0srv.c
 +      ibuf_contract_for_n_pages(TRUE, PCT_IBUF_IO(5));
  
        srv_main_thread_op_info = "flushing log";
-       log_buffer_flush_to_disk();
-@@ -2422,14 +2487,14 @@
+-      log_buffer_flush_to_disk();
++      /* No fsync when srv_flush_log_at_trx_commit != 1 */
++      log_buffer_flush_maybe_sync();
+       /* We run a full purge every 10 seconds, even if the server
+       were active */
+@@ -2422,14 +2598,14 @@
                (> 70 %), we assume we can afford reserving the disk(s) for
                the time it requires to flush 100 pages */
  
@@ -375,7 +994,7 @@ diff -r ed298a6e5e10 innobase/srv/srv0srv.c
                                                        ut_dulint_max);
        }
  
-@@ -2518,7 +2583,7 @@
+@@ -2518,7 +2694,7 @@
        if (srv_fast_shutdown && srv_shutdown_state > 0) {
                n_bytes_merged = 0;
        } else {
@@ -384,7 +1003,7 @@ diff -r ed298a6e5e10 innobase/srv/srv0srv.c
        }
  
        srv_main_thread_op_info = "reserving kernel mutex";
-@@ -2535,7 +2600,7 @@
+@@ -2535,7 +2711,7 @@
  
        if (srv_fast_shutdown < 2) {
                n_pages_flushed =
@@ -393,9 +1012,25 @@ diff -r ed298a6e5e10 innobase/srv/srv0srv.c
        } else {
                /* In the fastest shutdown we do not flush the buffer pool
                to data files: we set n_pages_flushed to 0 artificially. */
-diff -r ed298a6e5e10 innobase/srv/srv0start.c
---- a/innobase/srv/srv0start.c Mon Jun 01 00:36:10 2009 -0700
-+++ b/innobase/srv/srv0start.c Mon Jun 01 00:36:16 2009 -0700
+@@ -2557,7 +2733,14 @@
+       srv_main_thread_op_info = "flushing log";
+-      log_buffer_flush_to_disk();
++      current_time = time(NULL);
++      if (difftime(current_time, last_flush_time) > 1) {
++              log_buffer_flush_to_disk();
++              last_flush_time = current_time;
++      } else {
++              /* No fsync when srv_flush_log_at_trx_commit != 1 */
++              log_buffer_flush_maybe_sync();
++      }
+       srv_main_thread_op_info = "making checkpoint";
+diff -ruN a/innobase/srv/srv0start.c b/innobase/srv/srv0start.c
+--- a/innobase/srv/srv0start.c 2009-05-08 06:12:12.000000000 +0900
++++ b/innobase/srv/srv0start.c 2009-07-02 16:44:49.000000000 +0900
 @@ -1205,24 +1205,28 @@
                return(DB_ERROR);
        }
@@ -418,9 +1053,8 @@ diff -r ed298a6e5e10 innobase/srv/srv0start.c
                os_aio_init(8 * SRV_N_PENDING_IOS_PER_THREAD
                                                * srv_n_file_io_threads,
 -                                      srv_n_file_io_threads,
--                                      SRV_MAX_N_PENDING_SYNC_IOS);
 +                                      srv_n_read_io_threads, srv_n_write_io_threads,
-+                                      SRV_MAX_N_PENDING_SYNC_IOS * 8);
+                                       SRV_MAX_N_PENDING_SYNC_IOS);
        } else {
                os_aio_init(SRV_N_PENDING_IOS_PER_THREAD
                                                * srv_n_file_io_threads,
@@ -429,9 +1063,9 @@ diff -r ed298a6e5e10 innobase/srv/srv0start.c
                                        SRV_MAX_N_PENDING_SYNC_IOS);
        }
        
-diff -r ed298a6e5e10 patch_info/innodb_io_patches.info
---- /dev/null  Thu Jan 01 00:00:00 1970 +0000
-+++ b/patch_info/innodb_io_patches.info        Mon Jun 01 00:36:16 2009 -0700
+diff -ruN a/patch_info/innodb_io_patches.info b/patch_info/innodb_io_patches.info
+--- /dev/null  1970-01-01 09:00:00.000000000 +0900
++++ b/patch_info/innodb_io_patches.info        2009-07-02 16:44:49.000000000 +0900
 @@ -0,0 +1,11 @@
 +File=innodb_io_patches.patch
 +Name=Cluster of past InnoDB IO patches
@@ -444,9 +1078,9 @@ diff -r ed298a6e5e10 patch_info/innodb_io_patches.info
 +YK: Initial release
 +2009-01-09
 +YK: Some parameters are added
-diff -r ed298a6e5e10 sql/ha_innodb.cc
---- a/sql/ha_innodb.cc Mon Jun 01 00:36:10 2009 -0700
-+++ b/sql/ha_innodb.cc Mon Jun 01 00:36:16 2009 -0700
+diff -ruN a/sql/ha_innodb.cc b/sql/ha_innodb.cc
+--- a/sql/ha_innodb.cc 2009-07-02 16:43:23.000000000 +0900
++++ b/sql/ha_innodb.cc 2009-07-02 16:44:49.000000000 +0900
 @@ -149,6 +149,7 @@
       innobase_lock_wait_timeout, innobase_force_recovery,
       innobase_open_files;
@@ -475,9 +1109,9 @@ diff -r ed298a6e5e10 sql/ha_innodb.cc
  
                  /* For ibbackup to work the order of transactions in binlog
                  and InnoDB must be the same. Consider the situation
-diff -r ed298a6e5e10 sql/ha_innodb.h
---- a/sql/ha_innodb.h  Mon Jun 01 00:36:10 2009 -0700
-+++ b/sql/ha_innodb.h  Mon Jun 01 00:36:16 2009 -0700
+diff -ruN a/sql/ha_innodb.h b/sql/ha_innodb.h
+--- a/sql/ha_innodb.h  2009-07-02 16:43:23.000000000 +0900
++++ b/sql/ha_innodb.h  2009-07-02 18:10:51.000000000 +0900
 @@ -204,6 +204,7 @@
  extern long innobase_additional_mem_pool_size;
  extern long innobase_buffer_pool_awe_mem_mb;
@@ -497,14 +1131,14 @@ diff -r ed298a6e5e10 sql/ha_innodb.h
 +extern ulong srv_flush_neighbor_pages;
 +extern ulong srv_enable_unsafe_group_commit;
 +extern uint srv_read_ahead;
-+extern ulong srv_adaptive_checkpoint;
++extern uint srv_adaptive_checkpoint;
 +
  /* An option to enable the fix for "Bug#43660 SHOW INDEXES/ANALYZE does
  NOT update cardinality for indexes of InnoDB table". By default we are
  running with the fix disabled because MySQL 5.1 is frozen for such
-diff -r ed298a6e5e10 sql/mysqld.cc
---- a/sql/mysqld.cc    Mon Jun 01 00:36:10 2009 -0700
-+++ b/sql/mysqld.cc    Mon Jun 01 00:36:16 2009 -0700
+diff -ruN a/sql/mysqld.cc b/sql/mysqld.cc
+--- a/sql/mysqld.cc    2009-07-02 16:43:23.000000000 +0900
++++ b/sql/mysqld.cc    2009-07-02 18:00:04.000000000 +0900
 @@ -5086,6 +5086,16 @@
    OPT_INNODB_ROLLBACK_ON_TIMEOUT,
    OPT_SECURE_FILE_PRIV,
@@ -522,14 +1156,14 @@ diff -r ed298a6e5e10 sql/mysqld.cc
    OPT_INNODB_ADAPTIVE_HASH_INDEX,
    OPT_FEDERATED,
    OPT_INNODB_USE_LEGACY_CARDINALITY_ALGORITHM
-@@ -5403,6 +5413,45 @@
+@@ -5403,6 +5413,44 @@
     (gptr*) &srv_use_legacy_cardinality_algorithm,
     (gptr*) &srv_use_legacy_cardinality_algorithm,
     0, GET_BOOL, OPT_ARG, 1, 0, 0, 0, 0, 0},
 +  {"innodb_io_capacity", OPT_INNODB_IO_CAPACITY,
 +   "Number of IO operations per second the server can do. Tunes background IO rate.",
 +   (gptr*) &srv_io_capacity, (gptr*) &srv_io_capacity,
-+   0, GET_ULONG, REQUIRED_ARG, 100, 100, 999999999, 0, 0, 0},
++   0, GET_ULONG, REQUIRED_ARG, 200, 100, 999999999, 0, 0, 0},
 +  {"innodb_ibuf_max_size", OPT_INNODB_IBUF_MAX_SIZE,
 +   "The maximum size of the insert buffer. (in bytes)",
 +   (gptr*) &srv_ibuf_max_size, (gptr*) &srv_ibuf_max_size, 0,
@@ -550,9 +1184,8 @@ diff -r ed298a6e5e10 sql/mysqld.cc
 +   "Control read ahead activity. (none, random, linear, [both])",
 +   0, 0, 0, GET_ULONG, REQUIRED_ARG, 0, 0, 0, 0, 0, 0},
 +  {"innodb_adaptive_checkpoint", OPT_INNODB_ADAPTIVE_CHECKPOINT,
-+   "Enable/Diasable flushing along modified age. 0:disable 1:enable",
-+   (gptr*) &srv_adaptive_checkpoint, (gptr*) &srv_adaptive_checkpoint,
-+   0, GET_ULONG, REQUIRED_ARG, 0, 0, 1, 0, 0, 0},
++   "Enable/Diasable flushing along modified age. ([none], reflex, estimate)",
++   0, 0, 0, GET_ULONG, REQUIRED_ARG, 0, 0, 0, 0, 0, 0},
 +  {"innodb_enable_unsafe_group_commit", OPT_INNODB_ENABLE_UNSAFE_GROUP_COMMIT,
 +   "Enable/Disable unsafe group commit when support_xa=OFF and use with binlog or other XA storage engine.",
 +   (gptr*) &srv_enable_unsafe_group_commit, (gptr*) &srv_enable_unsafe_group_commit,
@@ -560,15 +1193,15 @@ diff -r ed298a6e5e10 sql/mysqld.cc
 +  {"innodb_read_io_threads", OPT_INNODB_READ_IO_THREADS,
 +   "Number of background read I/O threads in InnoDB.",
 +   (gptr*) &innobase_read_io_threads, (gptr*) &innobase_read_io_threads,
-+   0, GET_LONG, REQUIRED_ARG, 1, 1, 64, 0, 0, 0},
++   0, GET_LONG, REQUIRED_ARG, 8, 1, 64, 0, 0, 0},
 +  {"innodb_write_io_threads", OPT_INNODB_WRITE_IO_THREADS,
 +   "Number of background write I/O threads in InnoDB.",
 +   (gptr*) &innobase_write_io_threads, (gptr*) &innobase_write_io_threads,
-+   0, GET_LONG, REQUIRED_ARG, 1, 1, 64, 0, 0, 0},
++   0, GET_LONG, REQUIRED_ARG, 8, 1, 64, 0, 0, 0},
  #endif /* End HAVE_INNOBASE_DB */
    {"isam", OPT_ISAM, "Obsolete. ISAM storage engine is no longer supported.",
     (gptr*) &opt_isam, (gptr*) &opt_isam, 0, GET_BOOL, NO_ARG, 0, 0, 0,
-@@ -7644,6 +7693,22 @@
+@@ -7644,6 +7692,38 @@
    case OPT_INNODB_LOG_ARCHIVE:
      innobase_log_archive= argument ? test(atoi(argument)) : 1;
      break;
@@ -587,14 +1220,30 @@ diff -r ed298a6e5e10 sql/mysqld.cc
 +      }
 +      srv_read_ahead = (uint) ((type - 1) & 3);
 +    }
++    break;
++  case OPT_INNODB_ADAPTIVE_CHECKPOINT:
++    if (argument == disabled_my_option)
++      srv_adaptive_checkpoint = 0;
++    else if (! argument)
++      srv_adaptive_checkpoint = 0;
++    else
++    {
++      int type;
++      if ((type=find_type(argument, &innodb_adaptive_checkpoint_typelib, 2)) <= 0)
++      {
++        fprintf(stderr,"Unknown innodb_adaptive_checkpoint type: %s\n",argument);
++        exit(1);
++      }
++      srv_adaptive_checkpoint = (uint) ((type - 1) % 3);
++    }
 +    break;
  #endif /* HAVE_INNOBASE_DB */
    case OPT_MYISAM_RECOVER:
    {
-diff -r ed298a6e5e10 sql/set_var.cc
---- a/sql/set_var.cc   Mon Jun 01 00:36:10 2009 -0700
-+++ b/sql/set_var.cc   Mon Jun 01 00:36:16 2009 -0700
-@@ -489,6 +489,39 @@
+diff -ruN a/sql/set_var.cc b/sql/set_var.cc
+--- a/sql/set_var.cc   2009-07-02 16:43:23.000000000 +0900
++++ b/sql/set_var.cc   2009-07-02 17:45:29.000000000 +0900
+@@ -489,6 +489,57 @@
  sys_var_long_ptr  sys_innodb_flush_log_at_trx_commit(
                                          "innodb_flush_log_at_trx_commit",
                                          &srv_flush_log_at_trx_commit);
@@ -629,12 +1278,30 @@ diff -r ed298a6e5e10 sql/set_var.cc
 +                                      &innodb_read_ahead_typelib, fix_innodb_read_ahead);
 +sys_var_long_ptr      sys_innodb_enable_unsafe_group_commit("innodb_enable_unsafe_group_commit",
 +                                                             &srv_enable_unsafe_group_commit);
-+sys_var_long_ptr      sys_innodb_adaptive_checkpoint("innodb_adaptive_checkpoint",
-+                                                      &srv_adaptive_checkpoint);
++
++const char *innodb_adaptive_checkpoint_names[]=
++{
++  "none", /* 0 */
++  "reflex", /* 1 */
++  "estimate", /* 2 */
++  /* For compatibility of the older patch */
++  "0", /* 3 ("none" + 3) */
++  "1", /* 4 ("reflex" + 3) */
++  "2", /* 5 ("estimate" + 3) */
++  NullS
++};
++TYPELIB innodb_adaptive_checkpoint_typelib=
++{
++  array_elements(innodb_adaptive_checkpoint_names) - 1, "innodb_adaptive_checkpoint_typelib",
++  innodb_adaptive_checkpoint_names, NULL
++};
++sys_var_enum  sys_innodb_adaptive_checkpoint("innodb_adaptive_checkpoint",
++                           &srv_adaptive_checkpoint,
++                           &innodb_adaptive_checkpoint_typelib, fix_innodb_adaptive_checkpoint);
  sys_var_const_os_str_ptr sys_innodb_data_file_path("innodb_data_file_path", 
                                                 &innobase_data_file_path);
  sys_var_const_os_str_ptr sys_innodb_data_home_dir("innodb_data_home_dir", 
-@@ -860,6 +893,13 @@
+@@ -860,6 +911,13 @@
    &sys_innodb_thread_concurrency,
    &sys_innodb_commit_concurrency,
    &sys_innodb_flush_log_at_trx_commit,
@@ -648,7 +1315,7 @@ diff -r ed298a6e5e10 sql/set_var.cc
  #endif
    &sys_trust_routine_creators,
    &sys_trust_function_creators,
-@@ -997,6 +1037,16 @@
+@@ -997,6 +1055,16 @@
    {sys_innodb_table_locks.name, (char*) &sys_innodb_table_locks, SHOW_SYS},
    {sys_innodb_thread_concurrency.name, (char*) &sys_innodb_thread_concurrency, SHOW_SYS},
    {sys_innodb_thread_sleep_delay.name, (char*) &sys_innodb_thread_sleep_delay, SHOW_SYS},
@@ -665,7 +1332,7 @@ diff -r ed298a6e5e10 sql/set_var.cc
    {sys_innodb_use_legacy_cardinality_algorithm.name,
     (char*) &sys_innodb_use_legacy_cardinality_algorithm, SHOW_SYS},
  #endif
-@@ -1459,6 +1509,13 @@
+@@ -1459,6 +1527,18 @@
    }
  }
  
@@ -674,31 +1341,38 @@ diff -r ed298a6e5e10 sql/set_var.cc
 +{
 +  srv_read_ahead &= 3;
 +}
++
++extern void fix_innodb_adaptive_checkpoint(THD *thd, enum_var_type type)
++{
++  srv_adaptive_checkpoint %= 3;
++}
 +#endif /* HAVE_INNOBASE_DB */
 +
  static void fix_max_binlog_size(THD *thd, enum_var_type type)
  {
    DBUG_ENTER("fix_max_binlog_size");
-diff -r ed298a6e5e10 sql/set_var.h
---- a/sql/set_var.h    Mon Jun 01 00:36:10 2009 -0700
-+++ b/sql/set_var.h    Mon Jun 01 00:36:16 2009 -0700
-@@ -31,6 +31,10 @@
+diff -ruN a/sql/set_var.h b/sql/set_var.h
+--- a/sql/set_var.h    2009-07-02 16:43:23.000000000 +0900
++++ b/sql/set_var.h    2009-07-02 17:35:17.000000000 +0900
+@@ -31,6 +31,11 @@
  
  extern TYPELIB bool_typelib, delay_key_write_typelib, sql_mode_typelib;
  
 +#ifdef HAVE_INNOBASE_DB
 +extern TYPELIB innodb_read_ahead_typelib;
++extern TYPELIB innodb_adaptive_checkpoint_typelib;
 +#endif /* HAVE_INNOBASE_DB */
 +
  typedef int (*sys_check_func)(THD *,  set_var *);
  typedef bool (*sys_update_func)(THD *, set_var *);
  typedef void (*sys_after_update_func)(THD *,enum_var_type);
-@@ -1148,6 +1152,9 @@
+@@ -1148,6 +1153,10 @@
  int sql_set_variables(THD *thd, List<set_var_base> *var_list);
  bool not_all_support_one_shot(List<set_var_base> *var_list);
  void fix_delay_key_write(THD *thd, enum_var_type type);
 +#ifdef HAVE_INNOBASE_DB
 +void fix_innodb_read_ahead(THD *thd, enum_var_type type);
++void fix_innodb_adaptive_checkpoint(THD *thd, enum_var_type type);
 +#endif /* HAVE_INNOBASE_DB */
  ulong fix_sql_mode(ulong sql_mode);
  extern sys_var_const_str sys_charset_system;
index 305f63dfb221301653ab1a6f9b45b24ceaf4e1ad..d9e60e9dcb44b5e00b34776f89838441ce960cb4 100644 (file)
@@ -1,20 +1,20 @@
-diff -r 5060df9888d7 include/mysql_com.h
---- a/include/mysql_com.h      Tue Feb 17 22:33:54 2009 -0800
-+++ b/include/mysql_com.h      Tue Feb 17 22:33:58 2009 -0800
-@@ -121,6 +121,9 @@
- #define REFRESH_QUERY_CACHE_FREE 0x20000L /* pack query cache */
+diff -r d4826c0a98c2 include/mysql_com.h
+--- a/include/mysql_com.h      Wed Jul 29 09:58:58 2009 -0700
++++ b/include/mysql_com.h      Wed Jul 29 10:00:12 2009 -0700
+@@ -122,6 +122,9 @@
  #define REFRESH_DES_KEY_FILE  0x40000L
  #define REFRESH_USER_RESOURCES        0x80000L
-+
 +/* TRUNCATE INFORMATION_SCHEMA.INNODB_IO_PATTERN */
 +#define REFRESH_INNODB_IO_PATTERN     0x1000000L
++
  #define CLIENT_LONG_PASSWORD  1       /* new more secure passwords */
  #define CLIENT_FOUND_ROWS     2       /* Found instead of affected rows */
-diff -r 5060df9888d7 innobase/buf/buf0buf.c
---- a/innobase/buf/buf0buf.c   Tue Feb 17 22:33:54 2009 -0800
-+++ b/innobase/buf/buf0buf.c   Tue Feb 17 22:33:58 2009 -0800
-@@ -653,6 +653,9 @@
+ #define CLIENT_LONG_FLAG      4       /* Get all column flags */
+diff -r d4826c0a98c2 innobase/buf/buf0buf.c
+--- a/innobase/buf/buf0buf.c   Wed Jul 29 09:58:58 2009 -0700
++++ b/innobase/buf/buf0buf.c   Wed Jul 29 10:00:12 2009 -0700
+@@ -654,6 +654,9 @@
        }
  
        buf_pool->page_hash = hash_create(2 * max_size);
@@ -24,7 +24,7 @@ diff -r 5060df9888d7 innobase/buf/buf0buf.c
  
        buf_pool->n_pend_reads = 0;
  
-@@ -1966,6 +1969,9 @@
+@@ -1967,6 +1970,9 @@
        ulint           io_type;
        ulint           read_page_no;
        
@@ -34,7 +34,7 @@ diff -r 5060df9888d7 innobase/buf/buf0buf.c
        ut_ad(block);
  
        ut_a(block->state == BUF_BLOCK_FILE_PAGE);
-@@ -2067,6 +2073,26 @@
+@@ -2068,6 +2074,26 @@
                buf_pool->n_pages_read++;
  
                rw_lock_x_unlock_gen(&(block->lock), BUF_IO_READ);
@@ -61,7 +61,7 @@ diff -r 5060df9888d7 innobase/buf/buf0buf.c
  
  #ifdef UNIV_DEBUG
                if (buf_debug_prints) {
-@@ -2082,6 +2108,26 @@
+@@ -2083,6 +2109,26 @@
                buf_flush_write_complete(block);
  
                rw_lock_s_unlock_gen(&(block->lock), BUF_IO_WRITE);
@@ -88,7 +88,7 @@ diff -r 5060df9888d7 innobase/buf/buf0buf.c
  
                buf_pool->n_pages_written++;
  
-@@ -2656,3 +2702,58 @@
+@@ -2657,3 +2703,58 @@
  return buf_pool_get_nth_block(buf_pool, i);
  
  }
@@ -147,9 +147,9 @@ diff -r 5060df9888d7 innobase/buf/buf0buf.c
 +       }
 +       mutex_exit(&(buf_pool->mutex));
 +}
-diff -r 5060df9888d7 innobase/include/buf0buf.h
---- a/innobase/include/buf0buf.h       Tue Feb 17 22:33:54 2009 -0800
-+++ b/innobase/include/buf0buf.h       Tue Feb 17 22:33:58 2009 -0800
+diff -r d4826c0a98c2 innobase/include/buf0buf.h
+--- a/innobase/include/buf0buf.h       Wed Jul 29 09:58:58 2009 -0700
++++ b/innobase/include/buf0buf.h       Wed Jul 29 10:00:12 2009 -0700
 @@ -709,6 +709,18 @@
  void buf_pool_dump(void);
  buf_block_t* buf_pool_get_nth_block_no_inline(buf_pool_t* pool, ulint i);  
@@ -195,9 +195,9 @@ diff -r 5060df9888d7 innobase/include/buf0buf.h
  /* States of a control block */
  #define       BUF_BLOCK_NOT_USED      211     /* is in the free list */
  #define BUF_BLOCK_READY_FOR_USE       212     /* when buf_get_free_block returns
-diff -r 5060df9888d7 innobase/include/buf0types.h
---- a/innobase/include/buf0types.h     Tue Feb 17 22:33:54 2009 -0800
-+++ b/innobase/include/buf0types.h     Tue Feb 17 22:33:58 2009 -0800
+diff -r d4826c0a98c2 innobase/include/buf0types.h
+--- a/innobase/include/buf0types.h     Wed Jul 29 09:58:58 2009 -0700
++++ b/innobase/include/buf0types.h     Wed Jul 29 10:00:12 2009 -0700
 @@ -12,6 +12,8 @@
  typedef       struct buf_block_struct         buf_block_t;
  typedef       struct buf_pool_struct          buf_pool_t;
@@ -207,13 +207,13 @@ diff -r 5060df9888d7 innobase/include/buf0types.h
  /* The 'type' used of a buffer frame */
  typedef       byte    buf_frame_t;
  
-diff -r 5060df9888d7 innobase/include/srv0srv.h
---- a/innobase/include/srv0srv.h       Tue Feb 17 22:33:54 2009 -0800
-+++ b/innobase/include/srv0srv.h       Tue Feb 17 22:33:58 2009 -0800
-@@ -145,6 +145,11 @@
- extern ulint  srv_flush_neighbor_pages;
+diff -r d4826c0a98c2 innobase/include/srv0srv.h
+--- a/innobase/include/srv0srv.h       Wed Jul 29 09:58:58 2009 -0700
++++ b/innobase/include/srv0srv.h       Wed Jul 29 10:00:12 2009 -0700
+@@ -146,6 +146,11 @@
+ extern ulint  srv_enable_unsafe_group_commit;
  extern uint   srv_read_ahead;
- extern ulint  srv_adaptive_checkpoint;
+ extern uint   srv_adaptive_checkpoint;
 +
 +extern volatile ibool srv_io_pattern;
 +extern ulong  srv_io_pattern_trace;
@@ -222,13 +222,13 @@ diff -r 5060df9888d7 innobase/include/srv0srv.h
  /*-------------------------------------------*/
  
  extern ulint  srv_n_rows_inserted;
-diff -r 5060df9888d7 innobase/srv/srv0srv.c
---- a/innobase/srv/srv0srv.c   Tue Feb 17 22:33:54 2009 -0800
-+++ b/innobase/srv/srv0srv.c   Tue Feb 17 22:33:58 2009 -0800
-@@ -344,6 +344,11 @@
+diff -r d4826c0a98c2 innobase/srv/srv0srv.c
+--- a/innobase/srv/srv0srv.c   Wed Jul 29 09:58:58 2009 -0700
++++ b/innobase/srv/srv0srv.c   Wed Jul 29 10:00:12 2009 -0700
+@@ -352,6 +352,11 @@
  
  uint  srv_read_ahead = 3; /* 1: random  2: linear  3: Both */
- ulint srv_adaptive_checkpoint = 0; /* 0:disable 1:enable */
+ uint  srv_adaptive_checkpoint = 0; /* 0: none  1: reflex  2: estimate */
 +
 +volatile ibool srv_io_pattern = FALSE;
 +ulint   srv_io_pattern_trace = 0;
@@ -237,9 +237,9 @@ diff -r 5060df9888d7 innobase/srv/srv0srv.c
  /*-------------------------------------------*/
  ulong srv_n_spin_wait_rounds  = 20;
  ulong srv_n_free_tickets_to_enter = 500;
-diff -r 5060df9888d7 mysql-test/r/information_schema.result
---- a/mysql-test/r/information_schema.result   Tue Feb 17 22:33:54 2009 -0800
-+++ b/mysql-test/r/information_schema.result   Tue Feb 17 22:33:58 2009 -0800
+diff -r d4826c0a98c2 mysql-test/r/information_schema.result
+--- a/mysql-test/r/information_schema.result   Wed Jul 29 09:58:58 2009 -0700
++++ b/mysql-test/r/information_schema.result   Wed Jul 29 10:00:12 2009 -0700
 @@ -59,6 +59,7 @@
  USER_PRIVILEGES
  USER_STATISTICS
@@ -296,9 +296,9 @@ diff -r 5060df9888d7 mysql-test/r/information_schema.result
  KEY_COLUMN_USAGE      information_schema.KEY_COLUMN_USAGE     1
  PROCESSLIST   information_schema.PROCESSLIST  1
  PROFILING     information_schema.PROFILING    1
-diff -r 5060df9888d7 mysql-test/r/information_schema_db.result
---- a/mysql-test/r/information_schema_db.result        Tue Feb 17 22:33:54 2009 -0800
-+++ b/mysql-test/r/information_schema_db.result        Tue Feb 17 22:33:58 2009 -0800
+diff -r d4826c0a98c2 mysql-test/r/information_schema_db.result
+--- a/mysql-test/r/information_schema_db.result        Wed Jul 29 09:58:58 2009 -0700
++++ b/mysql-test/r/information_schema_db.result        Wed Jul 29 10:00:12 2009 -0700
 @@ -28,6 +28,7 @@
  USER_PRIVILEGES
  USER_STATISTICS
@@ -307,9 +307,9 @@ diff -r 5060df9888d7 mysql-test/r/information_schema_db.result
  show tables from INFORMATION_SCHEMA like 'T%';
  Tables_in_information_schema (T%)
  TABLES
-diff -r 5060df9888d7 mysql-test/r/mysqlshow.result
---- a/mysql-test/r/mysqlshow.result    Tue Feb 17 22:33:54 2009 -0800
-+++ b/mysql-test/r/mysqlshow.result    Tue Feb 17 22:33:58 2009 -0800
+diff -r d4826c0a98c2 mysql-test/r/mysqlshow.result
+--- a/mysql-test/r/mysqlshow.result    Wed Jul 29 09:58:58 2009 -0700
++++ b/mysql-test/r/mysqlshow.result    Wed Jul 29 10:00:12 2009 -0700
 @@ -102,6 +102,7 @@
  | USER_PRIVILEGES                       |
  | USER_STATISTICS                       |
@@ -326,9 +326,9 @@ diff -r 5060df9888d7 mysql-test/r/mysqlshow.result
  +---------------------------------------+
  Wildcard: inf_rmation_schema
  +--------------------+
-diff -r 5060df9888d7 patch_info/innodb_io_pattern.info
+diff -r d4826c0a98c2 patch_info/innodb_io_pattern.info
 --- /dev/null  Thu Jan 01 00:00:00 1970 +0000
-+++ b/patch_info/innodb_io_pattern.info        Tue Feb 17 22:33:58 2009 -0800
++++ b/patch_info/innodb_io_pattern.info        Wed Jul 29 10:00:12 2009 -0700
 @@ -0,0 +1,8 @@
 +File=innodb_io_pattern.patch
 +Name=Information schema table of InnoDB IO counts for each datafile pages
@@ -338,10 +338,10 @@ diff -r 5060df9888d7 patch_info/innodb_io_pattern.info
 +Comment=INFORMATION_SCHEMA.INNODB_IO_PATTERN
 +2008-12-01
 +YK: fix for mysql-test
-diff -r 5060df9888d7 sql/ha_innodb.cc
---- a/sql/ha_innodb.cc Tue Feb 17 22:33:54 2009 -0800
-+++ b/sql/ha_innodb.cc Tue Feb 17 22:33:58 2009 -0800
-@@ -1569,6 +1569,8 @@
+diff -r d4826c0a98c2 sql/ha_innodb.cc
+--- a/sql/ha_innodb.cc Wed Jul 29 09:58:58 2009 -0700
++++ b/sql/ha_innodb.cc Wed Jul 29 10:00:12 2009 -0700
+@@ -1583,6 +1583,8 @@
          pthread_cond_init(&commit_cond, NULL);
        innodb_inited= 1;
  
@@ -350,7 +350,7 @@ diff -r 5060df9888d7 sql/ha_innodb.cc
        /* If this is a replication slave and we needed to do a crash recovery,
        set the master binlog position to what InnoDB internally knew about
        how far we got transactions durable inside InnoDB. There is a
-@@ -6535,6 +6537,28 @@
+@@ -6551,6 +6553,28 @@
  }
  
  /****************************************************************************
@@ -379,32 +379,32 @@ diff -r 5060df9888d7 sql/ha_innodb.cc
  Implements the SHOW INNODB STATUS command. Sends the output of the InnoDB
  Monitor to the client. */
  
-diff -r 5060df9888d7 sql/ha_innodb.h
---- a/sql/ha_innodb.h  Tue Feb 17 22:33:54 2009 -0800
-+++ b/sql/ha_innodb.h  Tue Feb 17 22:33:58 2009 -0800
+diff -r d4826c0a98c2 sql/ha_innodb.h
+--- a/sql/ha_innodb.h  Wed Jul 29 09:58:58 2009 -0700
++++ b/sql/ha_innodb.h  Wed Jul 29 10:00:12 2009 -0700
 @@ -245,6 +245,9 @@
- extern ulong srv_adaptive_checkpoint;
+ extern uint srv_adaptive_checkpoint;
  extern ulong srv_show_locks_held;
  extern ulong srv_show_verbose_locks;
 +extern ulong srv_io_pattern_trace;
 +extern ulong srv_io_pattern_trace_running;
 +extern ulong srv_io_pattern_size_limit;
-
  /* An option to enable the fix for "Bug#43660 SHOW INDEXES/ANALYZE does
  NOT update cardinality for indexes of InnoDB table". By default we are
-@@ -270,6 +273,9 @@
- bool innodb_I_S_buffer_pool_content(THD* thd, TABLE_LIST *tables);
+@@ -278,6 +281,9 @@
  bool innodb_mutex_show_status(THD* thd);
  void innodb_export_status(void);
-+
 +void innodb_io_pattern_control(void);
 +void innodb_io_pattern_clear(void);
++
  void innobase_release_temporary_latches(THD *thd);
  
-diff -r 5060df9888d7 sql/lex.h
---- a/sql/lex.h        Tue Feb 17 22:33:54 2009 -0800
-+++ b/sql/lex.h        Tue Feb 17 22:33:58 2009 -0800
+ void innobase_store_binlog_offset_and_flush_log(char *binlog_name,longlong offset);
+diff -r d4826c0a98c2 sql/lex.h
+--- a/sql/lex.h        Wed Jul 29 09:58:58 2009 -0700
++++ b/sql/lex.h        Wed Jul 29 10:00:12 2009 -0700
 @@ -244,6 +244,7 @@
    { "INNER",          SYM(INNER_SYM)},
    { "INNOBASE",               SYM(INNOBASE_SYM)},
@@ -413,10 +413,10 @@ diff -r 5060df9888d7 sql/lex.h
    { "INOUT",            SYM(INOUT_SYM)},
    { "INSENSITIVE",      SYM(INSENSITIVE_SYM)},
    { "INSERT",         SYM(INSERT)},
-diff -r 5060df9888d7 sql/mysqld.cc
---- a/sql/mysqld.cc    Tue Feb 17 22:33:54 2009 -0800
-+++ b/sql/mysqld.cc    Tue Feb 17 22:33:58 2009 -0800
-@@ -5026,6 +5026,9 @@
+diff -r d4826c0a98c2 sql/mysqld.cc
+--- a/sql/mysqld.cc    Wed Jul 29 09:58:58 2009 -0700
++++ b/sql/mysqld.cc    Wed Jul 29 10:00:12 2009 -0700
+@@ -5029,6 +5029,9 @@
    OPT_INNODB_SYNC_SPIN_LOOPS,
    OPT_INNODB_CONCURRENCY_TICKETS,
    OPT_INNODB_THREAD_SLEEP_DELAY,
@@ -426,10 +426,10 @@ diff -r 5060df9888d7 sql/mysqld.cc
    OPT_BDB_CACHE_SIZE,
    OPT_BDB_LOG_BUFFER_SIZE,
    OPT_BDB_MAX_LOCK,
-@@ -5445,6 +5448,18 @@
+@@ -5461,6 +5464,18 @@
     "Number of background write I/O threads in InnoDB.",
     (gptr*) &innobase_write_io_threads, (gptr*) &innobase_write_io_threads,
-    0, GET_LONG, REQUIRED_ARG, 1, 1, 64, 0, 0, 0},
+    0, GET_LONG, REQUIRED_ARG, 8, 1, 64, 0, 0, 0},
 +  {"innodb_io_pattern_trace", OPT_INNODB_IO_PATTERN_TRACE,
 +   "Create/Drop the internal hash table for IO pattern tracing.",
 +   (gptr*) &srv_io_pattern_trace, (gptr*) &srv_io_pattern_trace,
@@ -445,10 +445,10 @@ diff -r 5060df9888d7 sql/mysqld.cc
  #endif /* End HAVE_INNOBASE_DB */
    {"isam", OPT_ISAM, "Obsolete. ISAM storage engine is no longer supported.",
     (gptr*) &opt_isam, (gptr*) &opt_isam, 0, GET_BOOL, NO_ARG, 0, 0, 0,
-diff -r 5060df9888d7 sql/set_var.cc
---- a/sql/set_var.cc   Tue Feb 17 22:33:54 2009 -0800
-+++ b/sql/set_var.cc   Tue Feb 17 22:33:58 2009 -0800
-@@ -528,6 +528,12 @@
+diff -r d4826c0a98c2 sql/set_var.cc
+--- a/sql/set_var.cc   Wed Jul 29 09:58:58 2009 -0700
++++ b/sql/set_var.cc   Wed Jul 29 10:00:12 2009 -0700
+@@ -546,6 +546,12 @@
  sys_var_long_ptr  sys_innodb_show_verbose_locks(
                                          "innodb_show_verbose_locks",
                                          &srv_show_verbose_locks);
@@ -461,7 +461,7 @@ diff -r 5060df9888d7 sql/set_var.cc
  sys_var_const_os_str_ptr sys_innodb_data_file_path("innodb_data_file_path", 
                                                 &innobase_data_file_path);
  sys_var_const_os_str_ptr sys_innodb_data_home_dir("innodb_data_home_dir", 
-@@ -901,6 +907,9 @@
+@@ -926,6 +932,9 @@
    &sys_innodb_adaptive_checkpoint,
    &sys_innodb_show_locks_held,
    &sys_innodb_show_verbose_locks,
@@ -471,7 +471,7 @@ diff -r 5060df9888d7 sql/set_var.cc
  #endif
    &sys_trust_routine_creators,
    &sys_trust_function_creators,
-@@ -1072,6 +1072,9 @@
+@@ -1075,6 +1084,9 @@
    {sys_innodb_adaptive_checkpoint.name, (char*) &sys_innodb_adaptive_checkpoint, SHOW_SYS},
    {"innodb_read_io_threads", (char*) &innobase_read_io_threads, SHOW_LONG},
    {"innodb_write_io_threads", (char*) &innobase_write_io_threads, SHOW_LONG},
@@ -481,7 +481,7 @@ diff -r 5060df9888d7 sql/set_var.cc
    {sys_innodb_use_legacy_cardinality_algorithm.name,
     (char*) &sys_innodb_use_legacy_cardinality_algorithm, SHOW_SYS},
  #endif
-@@ -3160,6 +3172,19 @@
+@@ -3210,6 +3222,19 @@
      thd->variables.lc_time_names= global_system_variables.lc_time_names;
  }
  
@@ -501,10 +501,10 @@ diff -r 5060df9888d7 sql/set_var.cc
  /*
    Functions to update thd->options bits
  */
-diff -r 5060df9888d7 sql/set_var.h
---- a/sql/set_var.h    Tue Feb 17 22:33:54 2009 -0800
-+++ b/sql/set_var.h    Tue Feb 17 22:33:58 2009 -0800
-@@ -989,6 +989,17 @@
+diff -r d4826c0a98c2 sql/set_var.h
+--- a/sql/set_var.h    Wed Jul 29 09:58:58 2009 -0700
++++ b/sql/set_var.h    Wed Jul 29 10:00:12 2009 -0700
+@@ -1012,6 +1012,17 @@
    virtual void set_default(THD *thd, enum_var_type type);
  };
  
@@ -522,10 +522,10 @@ diff -r 5060df9888d7 sql/set_var.h
  /****************************************************************************
    Classes for parsing of the SET command
  ****************************************************************************/
-diff -r 5060df9888d7 sql/sql_parse.cc
---- a/sql/sql_parse.cc Tue Feb 17 22:33:54 2009 -0800
-+++ b/sql/sql_parse.cc Tue Feb 17 22:33:58 2009 -0800
-@@ -8009,6 +8009,13 @@
+diff -r d4826c0a98c2 sql/sql_parse.cc
+--- a/sql/sql_parse.cc Wed Jul 29 09:58:58 2009 -0700
++++ b/sql/sql_parse.cc Wed Jul 29 10:00:12 2009 -0700
+@@ -8104,6 +8104,13 @@
      }
      pthread_mutex_unlock(&LOCK_global_user_client_stats);
    }
@@ -539,14 +539,13 @@ diff -r 5060df9888d7 sql/sql_parse.cc
   *write_to_binlog= tmp_write_to_binlog;
   return result;
  }
-diff -r 5060df9888d7 sql/sql_show.cc
---- a/sql/sql_show.cc  Tue Feb 17 22:33:54 2009 -0800
-+++ b/sql/sql_show.cc  Tue Feb 17 22:33:58 2009 -0800
-@@ -32,6 +32,17 @@
- #ifdef HAVE_INNOBASE_DB
+diff -r d4826c0a98c2 sql/sql_show.cc
+--- a/sql/sql_show.cc  Wed Jul 29 09:58:58 2009 -0700
++++ b/sql/sql_show.cc  Wed Jul 29 10:00:12 2009 -0700
+@@ -33,6 +33,17 @@
  #include "ha_innodb.h"
  #endif
-+
 +#ifdef HAVE_INNOBASE_DB
 +#define INSIDE_HA_INNOBASE_CC
 +extern "C" {
@@ -557,10 +556,11 @@ diff -r 5060df9888d7 sql/sql_show.cc
 +/* We need to undef it in InnoDB */
 +#undef byte
 +#endif /* HAVE_INNOBASE_DB */
++
  #ifndef NO_EMBEDDED_ACCESS_CHECKS
  static const char *grant_names[]={
-@@ -4088,6 +4099,67 @@
+   "select","insert","update","delete","create","drop","reload","shutdown",
+@@ -4108,6 +4119,72 @@
    DBUG_RETURN(res);
  }
  
@@ -574,6 +574,11 @@ diff -r 5060df9888d7 sql/sql_show.cc
 +  DBUG_ENTER("innodb_io_pattern_fill_table");
 +  int returnable= 0;
 +
++  /* deny access to non-superusers */
++  if (check_global_access(thd, PROCESS_ACL)) {
++    DBUG_RETURN(0);
++  }
++
 +  /* We cannot use inline functions of InnoDB here */
 +
 +  /* !!!!!ATTENTION!!!!!: This function is not protected by mutex for performance.     */
@@ -628,7 +633,7 @@ diff -r 5060df9888d7 sql/sql_show.cc
  /*
    Find schema_tables elment by name
  
-@@ -4894,6 +4966,19 @@
+@@ -4914,6 +4986,19 @@
    {0, 0, MYSQL_TYPE_STRING, 0, 0, 0}
  };
  
@@ -648,7 +653,7 @@ diff -r 5060df9888d7 sql/sql_show.cc
  
  ST_FIELD_INFO variables_fields_info[]=
  {
-@@ -5069,6 +5154,10 @@
+@@ -5089,6 +5174,10 @@
     make_old_format, 0, -1, -1, 1},
    {"VIEWS", view_fields_info, create_schema_table, 
      get_all_tables, 0, get_schema_views_record, 1, 2, 0},
@@ -659,9 +664,9 @@ diff -r 5060df9888d7 sql/sql_show.cc
    {0, 0, 0, 0, 0, 0, 0, 0, 0}
  };
  
-diff -r 5060df9888d7 sql/sql_yacc.yy
---- a/sql/sql_yacc.yy  Tue Feb 17 22:33:54 2009 -0800
-+++ b/sql/sql_yacc.yy  Tue Feb 17 22:33:58 2009 -0800
+diff -r d4826c0a98c2 sql/sql_yacc.yy
+--- a/sql/sql_yacc.yy  Wed Jul 29 09:58:58 2009 -0700
++++ b/sql/sql_yacc.yy  Wed Jul 29 10:00:12 2009 -0700
 @@ -685,6 +685,7 @@
  %token  INFILE
  %token  INNER_SYM
@@ -670,7 +675,7 @@ diff -r 5060df9888d7 sql/sql_yacc.yy
  %token  INOUT_SYM
  %token  INSENSITIVE_SYM
  %token  INSERT
-@@ -8541,6 +8542,7 @@
+@@ -8500,6 +8501,7 @@
          | MASTER_SYM    { Lex->type|= REFRESH_MASTER; }
        | DES_KEY_FILE  { Lex->type|= REFRESH_DES_KEY_FILE; }
        | RESOURCES     { Lex->type|= REFRESH_USER_RESOURCES; }
@@ -678,7 +683,7 @@ diff -r 5060df9888d7 sql/sql_yacc.yy
        | CLIENT_STATS_SYM { Lex->type|= REFRESH_CLIENT_STATS; }
        | USER_STATS_SYM { Lex->type|= REFRESH_USER_STATS; }
        | TABLE_STATS_SYM { Lex->type|= REFRESH_TABLE_STATS; }
-@@ -9594,6 +9596,7 @@
+@@ -9552,6 +9554,7 @@
        | ISOLATION             {}
        | ISSUER_SYM            {}
        | INNOBASE_SYM          {}
index 65ac766e0d110c82e34190ea29c2907cdc17e772..062fa471ce9edaec50867d38aeb08c69c8b72130 100644 (file)
@@ -150,7 +150,7 @@ diff -r e9fb5b8bcf78 sql/ha_innodb.h
 @@ -243,6 +243,8 @@
  extern ulong srv_enable_unsafe_group_commit;
  extern uint srv_read_ahead;
- extern ulong srv_adaptive_checkpoint;
+ extern uint srv_adaptive_checkpoint;
 +extern ulong srv_show_locks_held;
 +extern ulong srv_show_verbose_locks;
  
@@ -187,9 +187,9 @@ diff -r e9fb5b8bcf78 sql/set_var.cc
 --- a/sql/set_var.cc   Mon Jun 01 00:36:33 2009 -0700
 +++ b/sql/set_var.cc   Mon Jun 01 00:36:41 2009 -0700
 @@ -527,6 +527,12 @@
-                                                              &srv_enable_unsafe_group_commit);
sys_var_long_ptr      sys_innodb_adaptive_checkpoint("innodb_adaptive_checkpoint",
-                                                       &srv_adaptive_checkpoint);
+ sys_var_enum  sys_innodb_adaptive_checkpoint("innodb_adaptive_checkpoint",
                           &srv_adaptive_checkpoint,
+                            &innodb_adaptive_checkpoint_typelib, fix_innodb_adaptive_checkpoint);
 +sys_var_long_ptr  sys_innodb_show_locks_held(
 +                                        "innodb_show_locks_held",
 +                                        &srv_show_locks_held);
diff --git a/mysql-innodb_recovery_patches.patch b/mysql-innodb_recovery_patches.patch
new file mode 100644 (file)
index 0000000..3d3e567
--- /dev/null
@@ -0,0 +1,217 @@
+diff -ruN a/innobase/buf/buf0flu.c b/innobase/buf/buf0flu.c
+--- a/innobase/buf/buf0flu.c   2009-08-04 16:53:42.000000000 +0900
++++ b/innobase/buf/buf0flu.c   2009-08-04 17:02:36.000000000 +0900
+@@ -85,6 +85,22 @@
+       prev_b = NULL;
+       b = UT_LIST_GET_FIRST(buf_pool->flush_list);
++      if (srv_fast_recovery) {
++      /* speed hack */
++      if (b == NULL || (ut_dulint_cmp(b->oldest_modification,
++                                      block->oldest_modification) < 0)) {
++              UT_LIST_ADD_FIRST(flush_list, buf_pool->flush_list, block);
++      } else {
++              b = UT_LIST_GET_LAST(buf_pool->flush_list);
++              if (ut_dulint_cmp(b->oldest_modification,
++                                      block->oldest_modification) < 0) {
++                      /* align oldest_modification not to sort */
++                      block->oldest_modification = b->oldest_modification;
++              }
++              UT_LIST_ADD_LAST(flush_list, buf_pool->flush_list, block);
++      }
++      } else {
++      /* normal */
+       while (b && (ut_dulint_cmp(b->oldest_modification,
+                                       block->oldest_modification) > 0)) {
+               prev_b = b;
+@@ -97,6 +113,7 @@
+               UT_LIST_INSERT_AFTER(flush_list, buf_pool->flush_list, prev_b,
+                                                               block);
+       }
++      }
+       ut_ad(buf_flush_validate_low());
+ }
+diff -ruN a/innobase/buf/buf0rea.c b/innobase/buf/buf0rea.c
+--- a/innobase/buf/buf0rea.c   2009-08-04 16:53:42.000000000 +0900
++++ b/innobase/buf/buf0rea.c   2009-08-04 17:11:41.000000000 +0900
+@@ -127,6 +127,46 @@
+       block = buf_page_init_for_read(err, mode, space, tablespace_version,
+                                                               offset);
+       if (block == NULL) {
++              /* bugfix: http://bugs.mysql.com/bug.php?id=43948 */
++              if (recv_recovery_is_on() && *err == DB_TABLESPACE_DELETED) {
++                      /* hashed log recs must be treated here */
++                      recv_addr_t*    recv_addr;
++
++                      mutex_enter(&(recv_sys->mutex));
++
++                      if (recv_sys->apply_log_recs == FALSE) {
++                              mutex_exit(&(recv_sys->mutex));
++                              goto not_to_recover;
++                      }
++
++                      /* recv_get_fil_addr_struct() */
++                      recv_addr = HASH_GET_FIRST(recv_sys->addr_hash,
++                                      hash_calc_hash(ut_fold_ulint_pair(space, offset),
++                                              recv_sys->addr_hash));
++                      while (recv_addr) {
++                              if ((recv_addr->space == space)
++                                      && (recv_addr->page_no == offset)) {
++                                      break;
++                              }
++                              recv_addr = HASH_GET_NEXT(addr_hash, recv_addr);
++                      }
++
++                      if ((recv_addr == NULL)
++                          || (recv_addr->state == RECV_BEING_PROCESSED)
++                          || (recv_addr->state == RECV_PROCESSED)) {
++                              mutex_exit(&(recv_sys->mutex));
++                              goto not_to_recover;
++                      }
++
++                      fprintf(stderr, " (space:%lu is deleted)", space);
++                      recv_addr->state = RECV_PROCESSED;
++
++                      ut_a(recv_sys->n_addrs);
++                      recv_sys->n_addrs--;
++
++                      mutex_exit(&(recv_sys->mutex));
++              }
++not_to_recover:
+               
+               return(0);
+       }
+@@ -697,11 +737,11 @@
+               while (buf_pool->n_pend_reads >= recv_n_pool_free_frames / 2) {
+                       os_aio_simulated_wake_handler_threads();
+-                      os_thread_sleep(500000);
++                      os_thread_sleep(10000);
+                       count++;
+-                      if (count > 100) {
++                      if (count > 5000) {
+                               fprintf(stderr,
+ "InnoDB: Error: InnoDB has waited for 50 seconds for pending\n"
+ "InnoDB: reads to the buffer pool to be finished.\n"
+diff -ruN a/innobase/include/srv0srv.h b/innobase/include/srv0srv.h
+--- a/innobase/include/srv0srv.h       2009-08-04 16:53:42.000000000 +0900
++++ b/innobase/include/srv0srv.h       2009-08-04 17:39:51.000000000 +0900
+@@ -59,6 +59,8 @@
+ extern ibool  srv_file_per_table;
+ extern ibool    srv_locks_unsafe_for_binlog;
++extern ibool  srv_fast_recovery;
++
+ extern ulint  srv_n_data_files;
+ extern char** srv_data_file_names;
+ extern ulint* srv_data_file_sizes;
+diff -ruN a/innobase/log/log0recv.c b/innobase/log/log0recv.c
+--- a/innobase/log/log0recv.c  2009-07-07 21:54:08.000000000 +0900
++++ b/innobase/log/log0recv.c  2009-08-04 17:15:15.000000000 +0900
+@@ -101,7 +101,7 @@
+ use these free frames to read in pages when we start applying the
+ log records to the database. */
+-ulint  recv_n_pool_free_frames         = 256;
++ulint  recv_n_pool_free_frames         = 1024;
+ /* The maximum lsn we see for a page during the recovery process. If this
+ is bigger than the lsn we are able to scan up to, that is an indication that
+@@ -1135,6 +1135,8 @@
+       recv_addr = recv_get_fil_addr_struct(space, page_no);
+       if ((recv_addr == NULL)
++              /* bugfix: http://bugs.mysql.com/bug.php?id=44140 */
++          || (recv_addr->state == RECV_BEING_READ && !just_read_in)
+           || (recv_addr->state == RECV_BEING_PROCESSED)
+           || (recv_addr->state == RECV_PROCESSED)) {
+diff -ruN a/innobase/srv/srv0srv.c b/innobase/srv/srv0srv.c
+--- a/innobase/srv/srv0srv.c   2009-08-04 16:53:42.000000000 +0900
++++ b/innobase/srv/srv0srv.c   2009-08-04 17:41:05.000000000 +0900
+@@ -88,6 +88,8 @@
+                                                 i.e. do not use next-key locking
+                                                 except on duplicate key checking and
+                                                 foreign key checking */
++ibool srv_fast_recovery = FALSE;
++
+ ulint srv_n_data_files = 0;
+ char**        srv_data_file_names = NULL;
+ ulint*        srv_data_file_sizes = NULL;     /* size in database pages */ 
+diff -ruN a/patch_info/innodb_recovery_patches.info b/patch_info/innodb_recovery_patches.info
+--- /dev/null  1970-01-01 09:00:00.000000000 +0900
++++ b/patch_info/innodb_recovery_patches.info  2009-08-04 16:58:07.000000000 +0900
+@@ -0,0 +1,6 @@
++File=innodb_recovery_patches.patch
++Name=Bugfixes and adjustments about recovery process
++Version=1.0
++Author=Percona <info@percona.com>
++License=GPL
++Comment=
+diff -ruN a/sql/ha_innodb.cc b/sql/ha_innodb.cc
+--- a/sql/ha_innodb.cc 2009-08-04 16:53:42.000000000 +0900
++++ b/sql/ha_innodb.cc 2009-08-04 17:35:44.000000000 +0900
+@@ -182,6 +182,7 @@
+ my_bool innobase_rollback_on_timeout          = FALSE;
+ my_bool innobase_create_status_file           = FALSE;
+ my_bool innobase_adaptive_hash_index          = TRUE;
++my_bool innobase_fast_recovery                        = FALSE;
+ static char *internal_innobase_data_file_path = NULL;
+@@ -1534,6 +1535,8 @@
+       srv_lock_wait_timeout = (ulint) innobase_lock_wait_timeout;
+       srv_force_recovery = (ulint) innobase_force_recovery;
++      srv_fast_recovery = (ibool) innobase_fast_recovery;
++
+       srv_use_doublewrite_buf = (ibool) innobase_use_doublewrite;
+       srv_use_checksums = (ibool) innobase_use_checksums;
+diff -ruN a/sql/ha_innodb.h b/sql/ha_innodb.h
+--- a/sql/ha_innodb.h  2009-08-04 16:53:42.000000000 +0900
++++ b/sql/ha_innodb.h  2009-08-04 17:37:18.000000000 +0900
+@@ -220,6 +220,7 @@
+                innobase_use_large_pages,
+                innobase_use_native_aio,
+              innobase_file_per_table, innobase_locks_unsafe_for_binlog,
++             innobase_fast_recovery,
+              innobase_rollback_on_timeout,
+                innobase_create_status_file,
+                innobase_adaptive_hash_index;
+diff -ruN a/sql/mysqld.cc b/sql/mysqld.cc
+--- a/sql/mysqld.cc    2009-08-04 16:53:42.000000000 +0900
++++ b/sql/mysqld.cc    2009-08-04 17:48:25.000000000 +0900
+@@ -5102,6 +5102,7 @@
+   OPT_INNODB_READ_IO_THREADS,
+   OPT_INNODB_WRITE_IO_THREADS,
+   OPT_INNODB_USE_SYS_MALLOC,
++  OPT_INNODB_FAST_RECOVERY,
+   OPT_INNODB_THREAD_CONCURRENCY_TIMER_BASED,
+   OPT_INNODB_EXTRA_RSEGMENTS,
+   OPT_INNODB_DICT_SIZE_LIMIT,
+@@ -5347,6 +5348,10 @@
+   {"innodb_doublewrite", OPT_INNODB_DOUBLEWRITE, "Enable InnoDB doublewrite buffer (enabled by default). \
+ Disable with --skip-innodb-doublewrite.", (gptr*) &innobase_use_doublewrite,
+    (gptr*) &innobase_use_doublewrite, 0, GET_BOOL, NO_ARG, 1, 0, 0, 0, 0, 0},
++  {"innodb_fast_recovery", OPT_INNODB_FAST_RECOVERY,
++   "Enable to use speed hack of recovery avoiding flush list sorting.",
++   (gptr*) &innobase_fast_recovery, (gptr*) &innobase_fast_recovery,
++   0, GET_BOOL, NO_ARG, 0, 0, 0, 0, 0, 0},
+   {"innodb_fast_shutdown", OPT_INNODB_FAST_SHUTDOWN,
+    "Speeds up the shutdown process of the InnoDB storage engine. Possible "
+    "values are 0, 1 (faster)"
+diff -ruN a/sql/set_var.cc b/sql/set_var.cc
+--- a/sql/set_var.cc   2009-08-04 16:53:42.000000000 +0900
++++ b/sql/set_var.cc   2009-08-04 17:51:49.000000000 +0900
+@@ -1088,6 +1088,7 @@
+   {"innodb_read_io_threads", (char*) &innobase_read_io_threads, SHOW_LONG},
+   {"innodb_write_io_threads", (char*) &innobase_write_io_threads, SHOW_LONG},
+   {"innodb_use_sys_malloc", (char*) &innobase_use_sys_malloc, SHOW_MY_BOOL},
++  {"innodb_fast_recovery", (char*) &innobase_fast_recovery, SHOW_MY_BOOL},
+   {"innodb_thread_concurrency_timer_based", (char*) &innobase_thread_concurrency_timer_based, SHOW_MY_BOOL},
+   {"innodb_extra_rsegments", (char*) &innobase_extra_rsegments, SHOW_LONG},
+   {sys_innodb_dict_size_limit.name, (char*) &sys_innodb_dict_size_limit, SHOW_SYS},
index e45fccd8688dc6008df7360360984412bf7cbc19..b4a1a7938209039f77093a1b1b19cae728299cdf 100644 (file)
@@ -6,7 +6,7 @@ diff -ruN a/innobase/btr/btr0sea.c b/innobase/btr/btr0sea.c
        }
  
 -      ut_ad(btr_search_latch.writer != RW_LOCK_EX);
-+      ut_ad(rw_lock_get_writer(&btr_search_latch) != RW_LOCK_EX);
++      ut_ad(btr_search_latch.writer_count == 0);
        ut_ad(btr_search_latch.reader_count > 0);
  
        rec = ha_search_and_get_data(btr_search_sys->hash_index, fold);
index a56ae9ae78b113b86ef3e47e5b34a08ce8e48ffc..766a3b7055c33e17c18b752362fbe664c94be720 100644 (file)
@@ -386,7 +386,7 @@ diff -r fe944d2c6e1f sql/sql_show.cc
  #endif
  
  #ifndef NO_EMBEDDED_ACCESS_CHECKS
-@@ -4042,6 +4046,13 @@
+@@ -4042,6 +4046,19 @@
    DBUG_RETURN(res);
  }
  
@@ -394,6 +394,12 @@ diff -r fe944d2c6e1f sql/sql_show.cc
 +{
 +  DBUG_ENTER("fill_innodb_bp_content");
 +  int res= 0;
++
++  /* deny access to non-superusers */
++  if (check_global_access(thd, PROCESS_ACL)) {
++    DBUG_RETURN(0);
++  }
++
 +  innodb_I_S_buffer_pool_content(thd, tables);
 +  DBUG_RETURN(res);
 +}
diff --git a/mysql-innodb_split_buf_pool_mutex.patch b/mysql-innodb_split_buf_pool_mutex.patch
new file mode 100644 (file)
index 0000000..7fa7ac0
--- /dev/null
@@ -0,0 +1,1870 @@
+diff -r 7ac364cc9b41 innobase/buf/buf0buf.c
+--- a/innobase/buf/buf0buf.c   Fri Jul 03 15:41:50 2009 -0700
++++ b/innobase/buf/buf0buf.c   Fri Jul 03 15:41:57 2009 -0700
+@@ -549,6 +549,17 @@
+       mutex_create(&(buf_pool->mutex));
+       mutex_set_level(&(buf_pool->mutex), SYNC_BUF_POOL);
++      mutex_create(&(buf_pool->LRU_mutex));
++      mutex_set_level(&(buf_pool->LRU_mutex), SYNC_BUF_LRU_LIST);
++      rw_lock_create(&(buf_pool->hash_latch));
++      rw_lock_set_level(&(buf_pool->hash_latch), SYNC_BUF_PAGE_HASH);
++      mutex_create(&(buf_pool->free_mutex));
++      mutex_set_level(&(buf_pool->free_mutex), SYNC_BUF_FREE_LIST);
++      mutex_create(&(buf_pool->flush_list_mutex));
++      mutex_set_level(&(buf_pool->flush_list_mutex), SYNC_BUF_FLUSH_LIST);
++
++      mutex_enter(&(buf_pool->LRU_mutex));
++      rw_lock_x_lock(&(buf_pool->hash_latch));
+       mutex_enter(&(buf_pool->mutex));
+       if (srv_use_awe) {
+@@ -724,6 +735,8 @@
+               block->in_free_list = TRUE;
+       }
++      mutex_exit(&(buf_pool->LRU_mutex));
++      rw_lock_x_unlock(&(buf_pool->hash_latch));
+       mutex_exit(&(buf_pool->mutex));
+       if (srv_use_adaptive_hash_indexes) {
+@@ -753,6 +766,7 @@
+ {
+       buf_block_t*    bck;
++      ut_error; /* don't support AWE */
+ #ifdef UNIV_SYNC_DEBUG
+       ut_ad(mutex_own(&(buf_pool->mutex)));
+ #endif /* UNIV_SYNC_DEBUG */
+@@ -851,7 +865,7 @@
+       buf_block_t*    block)  /* in: block to make younger */
+ {
+ #ifdef UNIV_SYNC_DEBUG
+-      ut_ad(!mutex_own(&(buf_pool->mutex)));
++      ut_ad(!mutex_own(&(buf_pool->LRU_mutex)));
+ #endif /* UNIV_SYNC_DEBUG */
+       /* Note that we read freed_page_clock's without holding any mutex:
+@@ -860,12 +874,12 @@
+       if (buf_pool->freed_page_clock >= block->freed_page_clock 
+                               + 1 + (buf_pool->curr_size / 4)) {
+-              mutex_enter(&buf_pool->mutex);
++              mutex_enter(&buf_pool->LRU_mutex);
+               /* There has been freeing activity in the LRU list:
+               best to move to the head of the LRU list */
+               buf_LRU_make_block_young(block);
+-              mutex_exit(&buf_pool->mutex);
++              mutex_exit(&buf_pool->LRU_mutex);
+       }
+ }
+@@ -881,7 +895,7 @@
+ {
+       buf_block_t*    block;
+       
+-      mutex_enter(&(buf_pool->mutex));
++      mutex_enter(&(buf_pool->LRU_mutex));
+       block = buf_block_align(frame);
+@@ -889,7 +903,7 @@
+       buf_LRU_make_block_young(block);
+-      mutex_exit(&(buf_pool->mutex));
++      mutex_exit(&(buf_pool->LRU_mutex));
+ }
+ /************************************************************************
+@@ -900,7 +914,7 @@
+ /*===========*/
+       buf_block_t*    block)  /* in, own: block to be freed */
+ {
+-      mutex_enter(&(buf_pool->mutex));
++      //mutex_enter(&(buf_pool->mutex));
+       mutex_enter(&block->mutex);
+@@ -910,7 +924,7 @@
+       mutex_exit(&block->mutex);
+-      mutex_exit(&(buf_pool->mutex));
++      //mutex_exit(&(buf_pool->mutex));
+ }
+ /*************************************************************************
+@@ -951,11 +965,11 @@
+ {
+       buf_block_t*    block;
+-      mutex_enter_fast(&(buf_pool->mutex));
++      rw_lock_s_lock(&(buf_pool->hash_latch));
+       block = buf_page_hash_get(space, offset);
+-      mutex_exit(&(buf_pool->mutex));
++      rw_lock_s_unlock(&(buf_pool->hash_latch));
+       return(block);
+ }
+@@ -972,7 +986,7 @@
+ {
+       buf_block_t*    block;
+-      mutex_enter_fast(&(buf_pool->mutex));
++      rw_lock_s_lock(&(buf_pool->hash_latch));
+       block = buf_page_hash_get(space, offset);
+@@ -980,7 +994,7 @@
+               block->check_index_page_at_flush = FALSE;
+       }
+       
+-      mutex_exit(&(buf_pool->mutex));
++      rw_lock_s_unlock(&(buf_pool->hash_latch));
+ }
+ /************************************************************************
+@@ -999,7 +1013,7 @@
+       buf_block_t*    block;
+       ibool           is_hashed;
+-      mutex_enter_fast(&(buf_pool->mutex));
++      rw_lock_s_lock(&(buf_pool->hash_latch));
+       block = buf_page_hash_get(space, offset);
+@@ -1009,7 +1023,7 @@
+               is_hashed = block->is_hashed;
+       }
+-      mutex_exit(&(buf_pool->mutex));
++      rw_lock_s_unlock(&(buf_pool->hash_latch));
+       return(is_hashed);
+ }
+@@ -1051,7 +1065,7 @@
+ {
+       buf_block_t*    block;
+-      mutex_enter_fast(&(buf_pool->mutex));
++      rw_lock_s_lock(&(buf_pool->hash_latch));
+       block = buf_page_hash_get(space, offset);
+@@ -1059,7 +1073,7 @@
+               block->file_page_was_freed = TRUE;
+       }
+-      mutex_exit(&(buf_pool->mutex));
++      rw_lock_s_unlock(&(buf_pool->hash_latch));
+       return(block);
+ }
+@@ -1080,7 +1094,7 @@
+ {
+       buf_block_t*    block;
+-      mutex_enter_fast(&(buf_pool->mutex));
++      rw_lock_s_lock(&(buf_pool->hash_latch));
+       block = buf_page_hash_get(space, offset);
+@@ -1088,7 +1102,7 @@
+               block->file_page_was_freed = FALSE;
+       }
+-      mutex_exit(&(buf_pool->mutex));
++      rw_lock_s_unlock(&(buf_pool->hash_latch));
+       return(block);
+ }
+@@ -1167,26 +1181,33 @@
+       buf_pool->n_page_gets++;
+ loop:
+       block = NULL;
+-      mutex_enter_fast(&(buf_pool->mutex));
++      //mutex_enter_fast(&(buf_pool->mutex));
+       
+       if (guess) {
+               block = buf_block_align(guess);
++              mutex_enter(&block->mutex);
+               if ((offset != block->offset) || (space != block->space)
+                               || (block->state != BUF_BLOCK_FILE_PAGE)) {
++                      mutex_exit(&block->mutex);
+                       block = NULL;
+               }
+       }
+       if (block == NULL) {
++              rw_lock_s_lock(&(buf_pool->hash_latch));
+               block = buf_page_hash_get(space, offset);
++              if(block) {
++                      mutex_enter(&block->mutex);
++              }
++              rw_lock_s_unlock(&(buf_pool->hash_latch));
+       }
+       if (block == NULL) {
+               /* Page not in buf_pool: needs to be read from file */
+-              mutex_exit(&(buf_pool->mutex));
++              //mutex_exit(&(buf_pool->mutex));
+               if (mode == BUF_GET_IF_IN_POOL) {
+@@ -1205,7 +1226,7 @@
+               goto loop;
+       }
+-      mutex_enter(&block->mutex);
++      //mutex_enter(&block->mutex);
+       ut_a(block->state == BUF_BLOCK_FILE_PAGE);
+@@ -1217,7 +1238,7 @@
+               if (mode == BUF_GET_IF_IN_POOL) {
+                       /* The page is only being read to buffer */
+-                      mutex_exit(&buf_pool->mutex);
++                      //mutex_exit(&buf_pool->mutex);
+                       mutex_exit(&block->mutex);
+                       return(NULL);
+@@ -1242,7 +1263,7 @@
+ #else
+       buf_block_buf_fix_inc(block);
+ #endif
+-      mutex_exit(&buf_pool->mutex);
++      //mutex_exit(&buf_pool->mutex);
+       /* Check if this is the first access to the page */
+@@ -1685,7 +1706,7 @@
+       buf_block_t*    block)  /* in: block to init */
+ {
+ #ifdef UNIV_SYNC_DEBUG
+-      ut_ad(mutex_own(&(buf_pool->mutex)));
++      ut_ad(mutex_own(&(buf_pool->LRU_mutex)));
+       ut_ad(mutex_own(&(block->mutex)));
+ #endif /* UNIV_SYNC_DEBUG */
+       ut_a(block->state != BUF_BLOCK_FILE_PAGE);
+@@ -1792,7 +1813,8 @@
+       ut_a(block);
+-      mutex_enter(&(buf_pool->mutex));
++      mutex_enter(&(buf_pool->LRU_mutex));
++      rw_lock_x_lock(&(buf_pool->hash_latch));
+       mutex_enter(&block->mutex);
+       if (fil_tablespace_deleted_or_being_deleted_in_mem(space,
+@@ -1807,7 +1829,8 @@
+               being deleted, or the page is already in buf_pool, return */
+               mutex_exit(&block->mutex);
+-              mutex_exit(&(buf_pool->mutex));
++              mutex_exit(&(buf_pool->LRU_mutex));
++              rw_lock_x_unlock(&(buf_pool->hash_latch));
+               buf_block_free(block);
+@@ -1822,10 +1845,14 @@
+       ut_ad(block);
+       
+       buf_page_init(space, offset, block);
++      rw_lock_x_unlock(&(buf_pool->hash_latch));
+       /* The block must be put to the LRU list, to the old blocks */
+       buf_LRU_add_block(block, TRUE);         /* TRUE == to old blocks */
++      mutex_exit(&(buf_pool->LRU_mutex));
++
++      mutex_enter(&(buf_pool->mutex)); /* for consistency about aio */
+       
+       block->io_fix = BUF_IO_READ;
+@@ -1874,7 +1901,8 @@
+       free_block = buf_LRU_get_free_block();
+       
+-      mutex_enter(&(buf_pool->mutex));
++      mutex_enter(&(buf_pool->LRU_mutex));
++      rw_lock_x_lock(&(buf_pool->hash_latch));
+       block = buf_page_hash_get(space, offset);
+@@ -1885,7 +1913,8 @@
+               block->file_page_was_freed = FALSE;
+               /* Page can be found in buf_pool */
+-              mutex_exit(&(buf_pool->mutex));
++              mutex_exit(&(buf_pool->LRU_mutex));
++              rw_lock_x_unlock(&(buf_pool->hash_latch));
+               buf_block_free(free_block);
+@@ -1908,6 +1937,7 @@
+       mutex_enter(&block->mutex);
+       buf_page_init(space, offset, block);
++      rw_lock_x_unlock(&(buf_pool->hash_latch));
+       /* The block must be put to the LRU list */
+       buf_LRU_add_block(block, FALSE);
+@@ -1919,7 +1949,7 @@
+ #endif
+       buf_pool->n_pages_created++;
+-      mutex_exit(&(buf_pool->mutex));
++      mutex_exit(&(buf_pool->LRU_mutex));
+       mtr_memo_push(mtr, block, MTR_MEMO_BUF_FIX);
+@@ -1933,7 +1963,7 @@
+       ibuf_merge_or_delete_for_page(NULL, space, offset, TRUE);
+       /* Flush pages from the end of the LRU list if necessary */
+-      buf_flush_free_margin();
++      buf_flush_free_margin(FALSE);
+       frame = block->frame;
+@@ -1969,6 +1999,7 @@
+ {
+       ulint           io_type;
+       ulint           read_page_no;
++      ulint           flush_type;
+       
+       buf_io_counter_t*       io_counter;
+       ulint           fold;
+@@ -2051,9 +2082,6 @@
+               }
+       }
+       
+-      mutex_enter(&(buf_pool->mutex));
+-      mutex_enter(&block->mutex);
+-
+ #ifdef UNIV_IBUF_DEBUG
+       ut_a(ibuf_count_get(block->space, block->offset) == 0);
+ #endif
+@@ -2062,9 +2090,12 @@
+       removes the newest lock debug record, without checking the thread
+       id. */
+-      block->io_fix = 0;
+-      
+       if (io_type == BUF_IO_READ) {
++              mutex_enter(&block->mutex);
++              mutex_enter(&(buf_pool->mutex));
++
++              block->io_fix = 0;
++
+               /* NOTE that the call to ibuf may have moved the ownership of
+               the x-latch to this OS thread: do not let this confuse you in
+               debugging! */           
+@@ -2095,6 +2126,8 @@
+               }
+               }
++              mutex_exit(&(buf_pool->mutex));
++              mutex_exit(&block->mutex);
+ #ifdef UNIV_DEBUG
+               if (buf_debug_prints) {
+                       fputs("Has read ", stderr);
+@@ -2103,10 +2136,23 @@
+       } else {
+               ut_ad(io_type == BUF_IO_WRITE);
++              flush_type = block->flush_type;
++              if (flush_type == BUF_FLUSH_LRU) {
++                      mutex_enter(&(buf_pool->LRU_mutex));
++              }
++              mutex_enter(&block->mutex);
++              mutex_enter(&(buf_pool->mutex));
++
++              block->io_fix = 0;
++
+               /* Write means a flush operation: call the completion
+               routine in the flush system */
+               buf_flush_write_complete(block);
++
++              if (flush_type == BUF_FLUSH_LRU) {
++                      mutex_exit(&(buf_pool->LRU_mutex));
++              }
+               rw_lock_s_unlock_gen(&(block->lock), BUF_IO_WRITE);
+               /* io_counter here */
+@@ -2132,6 +2178,9 @@
+               buf_pool->n_pages_written++;
++              mutex_exit(&(buf_pool->mutex));
++              mutex_exit(&block->mutex);
++
+ #ifdef UNIV_DEBUG
+               if (buf_debug_prints) {
+                       fputs("Has written ", stderr);
+@@ -2139,9 +2188,6 @@
+ #endif /* UNIV_DEBUG */
+       }
+       
+-      mutex_exit(&block->mutex);
+-      mutex_exit(&(buf_pool->mutex));
+-
+ #ifdef UNIV_DEBUG
+       if (buf_debug_prints) {
+               fprintf(stderr, "page space %lu page no %lu\n",
+@@ -2169,11 +2215,11 @@
+               freed = buf_LRU_search_and_free_block(100);
+       }
+       
+-      mutex_enter(&(buf_pool->mutex));
++      mutex_enter(&(buf_pool->LRU_mutex));
+       ut_ad(UT_LIST_GET_LEN(buf_pool->LRU) == 0);
+-      mutex_exit(&(buf_pool->mutex));
++      mutex_exit(&(buf_pool->LRU_mutex));
+ }
+ /*************************************************************************
+@@ -2195,7 +2241,10 @@
+       
+       ut_ad(buf_pool);
+-      mutex_enter(&(buf_pool->mutex));
++      //mutex_enter(&(buf_pool->mutex));
++      mutex_enter(&(buf_pool->LRU_mutex));
++      rw_lock_x_lock(&(buf_pool->hash_latch));
++      /* for keep the new latch order, it cannot validate correctly... */
+       for (i = 0; i < buf_pool->curr_size; i++) {
+@@ -2256,18 +2305,26 @@
+       }
+       ut_a(UT_LIST_GET_LEN(buf_pool->LRU) == n_lru);
++      /* because of latching order with block->mutex, we cannot get free_mutex before that */
++/*
+       if (UT_LIST_GET_LEN(buf_pool->free) != n_free) {
+               fprintf(stderr, "Free list len %lu, free blocks %lu\n",
+                       (ulong) UT_LIST_GET_LEN(buf_pool->free), (ulong) n_free);
+               ut_error;
+       }
++*/
++      /* because of latching order with block->mutex, we cannot get flush_list_mutex before that */
++/*
+       ut_a(UT_LIST_GET_LEN(buf_pool->flush_list) == n_flush);
+       ut_a(buf_pool->n_flush[BUF_FLUSH_SINGLE_PAGE] == n_single_flush);
+       ut_a(buf_pool->n_flush[BUF_FLUSH_LIST] == n_list_flush);
+       ut_a(buf_pool->n_flush[BUF_FLUSH_LRU] == n_lru_flush);
++*/
+       
+-      mutex_exit(&(buf_pool->mutex));
++      //mutex_exit(&(buf_pool->mutex));
++      mutex_exit(&(buf_pool->LRU_mutex));
++      rw_lock_x_unlock(&(buf_pool->hash_latch));
+       ut_a(buf_LRU_validate());
+       ut_a(buf_flush_validate());
+@@ -2299,7 +2356,9 @@
+       index_ids = mem_alloc(sizeof(dulint) * size);
+       counts = mem_alloc(sizeof(ulint) * size);
+-      mutex_enter(&(buf_pool->mutex));
++      mutex_enter(&(buf_pool->LRU_mutex));
++      mutex_enter(&(buf_pool->free_mutex));
++      mutex_enter(&(buf_pool->flush_list_mutex));
+       
+       fprintf(stderr,
+               "buf_pool size %lu\n"
+@@ -2352,7 +2411,9 @@
+               }
+       }
+-      mutex_exit(&(buf_pool->mutex));
++      mutex_exit(&(buf_pool->LRU_mutex));
++      mutex_exit(&(buf_pool->free_mutex));
++      mutex_exit(&(buf_pool->flush_list_mutex));
+       for (i = 0; i < n_found; i++) {
+               index = dict_index_get_if_in_cache(index_ids[i]);
+@@ -2387,7 +2448,7 @@
+         ulint i;
+         ulint fixed_pages_number = 0;
+-        mutex_enter(&(buf_pool->mutex));
++        //mutex_enter(&(buf_pool->mutex));
+         for (i = 0; i < buf_pool->curr_size; i++) {
+@@ -2404,7 +2465,7 @@
+               }
+         }
+-        mutex_exit(&(buf_pool->mutex));
++        //mutex_exit(&(buf_pool->mutex));
+         return fixed_pages_number;
+ }
+ #endif /* UNIV_DEBUG */
+@@ -2432,7 +2493,7 @@
+ {
+       ulint   ratio;
+-      mutex_enter(&(buf_pool->mutex));
++      //mutex_enter(&(buf_pool->mutex)); /* optimistic */
+       ratio = (100 * UT_LIST_GET_LEN(buf_pool->flush_list))
+                    / (1 + UT_LIST_GET_LEN(buf_pool->LRU)
+@@ -2440,7 +2501,7 @@
+                      /* 1 + is there to avoid division by zero */   
+-      mutex_exit(&(buf_pool->mutex));
++      //mutex_exit(&(buf_pool->mutex)); /* optimistic */
+       return(ratio);
+ }
+@@ -2460,7 +2521,10 @@
+       ut_ad(buf_pool);
+       size = buf_pool->curr_size;
++      mutex_enter(&(buf_pool->LRU_mutex));
++      mutex_enter(&(buf_pool->free_mutex));
+       mutex_enter(&(buf_pool->mutex));
++      mutex_enter(&(buf_pool->flush_list_mutex));
+       
+       if (srv_use_awe) {
+               fprintf(stderr,
+@@ -2533,7 +2597,10 @@
+       buf_pool->n_pages_written_old = buf_pool->n_pages_written;
+       buf_pool->n_pages_awe_remapped_old = buf_pool->n_pages_awe_remapped;
++      mutex_exit(&(buf_pool->LRU_mutex));
++      mutex_exit(&(buf_pool->free_mutex));
+       mutex_exit(&(buf_pool->mutex));
++      mutex_exit(&(buf_pool->flush_list_mutex));
+ }
+ /**************************************************************************
+@@ -2563,7 +2630,7 @@
+       
+       ut_ad(buf_pool);
+-      mutex_enter(&(buf_pool->mutex));
++      //mutex_enter(&(buf_pool->mutex)); /* optimistic */
+       for (i = 0; i < buf_pool->curr_size; i++) {
+@@ -2586,7 +2653,7 @@
+               mutex_exit(&block->mutex);
+       }
+-      mutex_exit(&(buf_pool->mutex));
++      //mutex_exit(&(buf_pool->mutex)); /* optimistic */
+       return(TRUE);
+ }     
+@@ -2626,11 +2693,11 @@
+ {
+       ulint   len;
+-      mutex_enter(&(buf_pool->mutex));
++      mutex_enter(&(buf_pool->free_mutex));
+       len = UT_LIST_GET_LEN(buf_pool->free);
+-      mutex_exit(&(buf_pool->mutex));
++      mutex_exit(&(buf_pool->free_mutex));
+       return(len);
+ }
+diff -r 7ac364cc9b41 innobase/buf/buf0flu.c
+--- a/innobase/buf/buf0flu.c   Fri Jul 03 15:41:50 2009 -0700
++++ b/innobase/buf/buf0flu.c   Fri Jul 03 15:41:57 2009 -0700
+@@ -49,7 +49,9 @@
+       buf_block_t*    block)  /* in: block which is modified */
+ {
+ #ifdef UNIV_SYNC_DEBUG
+-      ut_ad(mutex_own(&(buf_pool->mutex)));
++      //ut_ad(mutex_own(&(buf_pool->mutex)));
++      ut_ad(mutex_own(&block->mutex));
++      ut_ad(mutex_own(&(buf_pool->flush_list_mutex)));
+ #endif /* UNIV_SYNC_DEBUG */
+       ut_a(block->state == BUF_BLOCK_FILE_PAGE);
+@@ -79,7 +81,9 @@
+       buf_block_t*    b;
+       
+ #ifdef UNIV_SYNC_DEBUG
+-      ut_ad(mutex_own(&(buf_pool->mutex)));
++      //ut_ad(mutex_own(&(buf_pool->mutex)));
++      ut_ad(mutex_own(&block->mutex));
++      ut_ad(mutex_own(&(buf_pool->flush_list_mutex)));
+ #endif /* UNIV_SYNC_DEBUG */
+       prev_b = NULL;
+@@ -113,16 +117,18 @@
+                               BUF_BLOCK_FILE_PAGE and in the LRU list */
+ {
+ #ifdef UNIV_SYNC_DEBUG
+-      ut_ad(mutex_own(&(buf_pool->mutex)));
++      //ut_ad(mutex_own(&(buf_pool->mutex)));
+       ut_ad(mutex_own(&block->mutex));
+ #endif /* UNIV_SYNC_DEBUG */
+-      if (block->state != BUF_BLOCK_FILE_PAGE) {
++      if (!block->in_LRU_list || block->state != BUF_BLOCK_FILE_PAGE) {
++              /* permited not to own LRU_mutex..  */
++/*
+               ut_print_timestamp(stderr);
+               fprintf(stderr,
+ "  InnoDB: Error: buffer block state %lu in the LRU list!\n",
+                       (ulong)block->state);
+               ut_print_buf(stderr, (byte*)block, sizeof(buf_block_t));
+-
++*/
+               return(FALSE);
+       }
+@@ -148,12 +154,13 @@
+       ulint           flush_type)/* in: BUF_FLUSH_LRU or BUF_FLUSH_LIST */
+ {
+ #ifdef UNIV_SYNC_DEBUG
+-      ut_ad(mutex_own(&(buf_pool->mutex)));
++      //ut_ad(mutex_own(&(buf_pool->mutex)));
+       ut_ad(mutex_own(&(block->mutex)));
+ #endif /* UNIV_SYNC_DEBUG */
+-      ut_a(block->state == BUF_BLOCK_FILE_PAGE);
++      //ut_a(block->state == BUF_BLOCK_FILE_PAGE);
+-      if ((ut_dulint_cmp(block->oldest_modification, ut_dulint_zero) > 0)
++      if (block->state == BUF_BLOCK_FILE_PAGE
++          && (ut_dulint_cmp(block->oldest_modification, ut_dulint_zero) > 0)
+                                               && (block->io_fix == 0)) {
+               if (flush_type != BUF_FLUSH_LRU) {
+@@ -182,15 +189,17 @@
+ {
+       ut_ad(block);
+ #ifdef UNIV_SYNC_DEBUG
+-      ut_ad(mutex_own(&(buf_pool->mutex)));
++      //ut_ad(mutex_own(&(buf_pool->mutex)));
+ #endif /* UNIV_SYNC_DEBUG */
+       ut_a(block->state == BUF_BLOCK_FILE_PAGE);
++      mutex_enter(&(buf_pool->flush_list_mutex));
+       block->oldest_modification = ut_dulint_zero;
+       UT_LIST_REMOVE(flush_list, buf_pool->flush_list, block);
+       ut_d(UT_LIST_VALIDATE(flush_list, buf_block_t, buf_pool->flush_list));
++      mutex_exit(&(buf_pool->flush_list_mutex));
+       (buf_pool->n_flush[block->flush_type])--;
+@@ -536,18 +545,20 @@
+       ut_ad(flush_type == BUF_FLUSH_LRU || flush_type == BUF_FLUSH_LIST
+                               || flush_type == BUF_FLUSH_SINGLE_PAGE);
+-      mutex_enter(&(buf_pool->mutex));
++      rw_lock_s_lock(&(buf_pool->hash_latch));
+       block = buf_page_hash_get(space, offset);
+       ut_a(!block || block->state == BUF_BLOCK_FILE_PAGE);
+       if (!block) {
+-              mutex_exit(&(buf_pool->mutex));
++              rw_lock_s_unlock(&(buf_pool->hash_latch));
+               return(0);
+       }
+       mutex_enter(&block->mutex);
++      mutex_enter(&(buf_pool->mutex));
++      rw_lock_s_unlock(&(buf_pool->hash_latch));
+       if (flush_type == BUF_FLUSH_LIST
+           && buf_flush_ready_for_flush(block, flush_type)) {
+@@ -744,7 +755,7 @@
+               high = fil_space_get_size(space);
+       }
+-      mutex_enter(&(buf_pool->mutex));
++      rw_lock_s_lock(&(buf_pool->hash_latch));
+       for (i = low; i < high; i++) {
+@@ -778,7 +789,7 @@
+                               mutex_exit(&block->mutex);
+-                              mutex_exit(&(buf_pool->mutex));
++                              rw_lock_s_unlock(&(buf_pool->hash_latch));
+                               /* Note: as we release the buf_pool mutex
+                               above, in buf_flush_try_page we cannot be sure
+@@ -789,14 +800,14 @@
+                               count += buf_flush_try_page(space, i,
+                                                           flush_type);
+-                              mutex_enter(&(buf_pool->mutex));
++                              rw_lock_s_lock(&(buf_pool->hash_latch));
+                       } else {
+                               mutex_exit(&block->mutex);
+                       }
+               }
+       }
+                               
+-      mutex_exit(&(buf_pool->mutex));
++      rw_lock_s_unlock(&(buf_pool->hash_latch));
+       return(count);
+ }
+@@ -831,6 +842,7 @@
+       ulint           space;
+       ulint           offset;
+       ibool           found;
++      ulint           remaining       = 0;
+       
+       ut_ad((flush_type == BUF_FLUSH_LRU)
+                                       || (flush_type == BUF_FLUSH_LIST)); 
+@@ -849,6 +861,12 @@
+       }
+       (buf_pool->init_flush)[flush_type] = TRUE;
++
++      mutex_exit(&(buf_pool->mutex));
++
++      if (flush_type == BUF_FLUSH_LRU) {
++              mutex_enter(&(buf_pool->LRU_mutex));
++      }
+       
+       for (;;) {
+               /* If we have flushed enough, leave the loop */
+@@ -865,7 +883,10 @@
+               } else {
+                       ut_ad(flush_type == BUF_FLUSH_LIST);
++                      mutex_enter(&(buf_pool->flush_list_mutex));
++                      remaining = UT_LIST_GET_LEN(buf_pool->flush_list);
+                       block = UT_LIST_GET_LAST(buf_pool->flush_list);
++                      mutex_exit(&(buf_pool->flush_list_mutex));
+                       if (!block
+                           || (ut_dulint_cmp(block->oldest_modification,
+                                                       lsn_limit) >= 0)) {
+@@ -895,7 +916,9 @@
+                               offset = block->offset;
+           
+                               mutex_exit(&block->mutex);
+-                              mutex_exit(&(buf_pool->mutex));
++                              if (flush_type == BUF_FLUSH_LRU) {
++                                      mutex_exit(&(buf_pool->LRU_mutex));
++                              }
+                               old_page_count = page_count;
+                               
+@@ -915,7 +938,9 @@
+                               flush_type, offset,
+                               page_count - old_page_count); */
+-                              mutex_enter(&(buf_pool->mutex));
++                              if (flush_type == BUF_FLUSH_LRU) {
++                                      mutex_enter(&(buf_pool->LRU_mutex));
++                              }
+                       } else if (flush_type == BUF_FLUSH_LRU) {
+@@ -927,16 +952,25 @@
+                               mutex_exit(&block->mutex);
++                              mutex_enter(&(buf_pool->flush_list_mutex));
+                               block = UT_LIST_GET_PREV(flush_list, block);
++                              mutex_exit(&(buf_pool->flush_list_mutex));
++                              remaining--;
+                       }
+               }
+               /* If we could not find anything to flush, leave the loop */
+-              if (!found) {
++              if (!found && !remaining) {
+                       break;
+               }
+       }
++
++      if (flush_type == BUF_FLUSH_LRU) {
++              mutex_exit(&(buf_pool->LRU_mutex));
++      }
++
++      mutex_enter(&(buf_pool->mutex));
+       (buf_pool->init_flush)[flush_type] = FALSE;
+@@ -997,7 +1031,7 @@
+       ulint           n_replaceable;
+       ulint           distance        = 0;
+       
+-      mutex_enter(&(buf_pool->mutex));
++      //mutex_enter(&(buf_pool->mutex)); /* optimistic */
+       n_replaceable = UT_LIST_GET_LEN(buf_pool->free);
+@@ -1007,6 +1041,12 @@
+              && (n_replaceable < BUF_FLUSH_FREE_BLOCK_MARGIN
+                                       + BUF_FLUSH_EXTRA_MARGIN)
+              && (distance < BUF_LRU_FREE_SEARCH_LEN)) {
++
++              if (!block->in_LRU_list) {
++                      /* reatart. but it is very optimistic */
++                      block = UT_LIST_GET_LAST(buf_pool->LRU);
++                      continue;
++              }
+               mutex_enter(&block->mutex);
+@@ -1021,7 +1061,7 @@
+               block = UT_LIST_GET_PREV(LRU, block);
+       }
+       
+-      mutex_exit(&(buf_pool->mutex));
++      //mutex_exit(&(buf_pool->mutex)); /* optimistic */
+       if (n_replaceable >= BUF_FLUSH_FREE_BLOCK_MARGIN) {
+@@ -1040,8 +1080,9 @@
+ immediately, without waiting. */ 
+ void
+-buf_flush_free_margin(void)
++buf_flush_free_margin(
+ /*=======================*/
++      ibool   wait)
+ {
+       ulint   n_to_flush;
+       ulint   n_flushed;
+@@ -1051,7 +1092,7 @@
+       if (n_to_flush > 0) {
+               n_flushed = buf_flush_batch(BUF_FLUSH_LRU, n_to_flush,
+                                                       ut_dulint_zero);
+-              if (n_flushed == ULINT_UNDEFINED) {
++              if (wait && n_flushed == ULINT_UNDEFINED) {
+                       /* There was an LRU type flush batch already running;
+                       let us wait for it to end */
+                  
+@@ -1101,11 +1142,11 @@
+ {
+       ibool   ret;
+       
+-      mutex_enter(&(buf_pool->mutex));
++      mutex_enter(&(buf_pool->flush_list_mutex));
+       ret = buf_flush_validate_low();
+       
+-      mutex_exit(&(buf_pool->mutex));
++      mutex_exit(&(buf_pool->flush_list_mutex));
+       return(ret);
+ }
+diff -r 7ac364cc9b41 innobase/buf/buf0lru.c
+--- a/innobase/buf/buf0lru.c   Fri Jul 03 15:41:50 2009 -0700
++++ b/innobase/buf/buf0lru.c   Fri Jul 03 15:41:57 2009 -0700
+@@ -108,7 +108,7 @@
+       page_arr = ut_malloc(sizeof(ulint)
+                            * BUF_LRU_DROP_SEARCH_HASH_SIZE);
+-      mutex_enter(&buf_pool->mutex);
++      mutex_enter(&buf_pool->LRU_mutex);
+ scan_again:
+       num_entries = 0;
+@@ -147,12 +147,12 @@
+                       }
+                       /* Array full. We release the buf_pool->mutex to
+                       obey the latching order. */
+-                      mutex_exit(&buf_pool->mutex);
++                      mutex_exit(&buf_pool->LRU_mutex);
+                       buf_LRU_drop_page_hash_batch(id, page_arr,
+                                                    num_entries);
+                       num_entries = 0;
+-                      mutex_enter(&buf_pool->mutex);
++                      mutex_enter(&buf_pool->LRU_mutex);
+               } else {
+                       mutex_exit(&block->mutex);
+               }
+@@ -177,7 +177,7 @@
+               }
+       }
+-      mutex_exit(&buf_pool->mutex);
++      mutex_exit(&buf_pool->LRU_mutex);
+       /* Drop any remaining batch of search hashed pages. */
+       buf_LRU_drop_page_hash_batch(id, page_arr, num_entries);
+@@ -206,7 +206,8 @@
+       buf_LRU_drop_page_hash_for_tablespace(id);
+ scan_again:
+-      mutex_enter(&(buf_pool->mutex));
++      mutex_enter(&(buf_pool->LRU_mutex));
++      rw_lock_x_lock(&(buf_pool->hash_latch));
+       
+       all_freed = TRUE;
+       
+@@ -244,7 +245,8 @@
+                       
+                               mutex_exit(&block->mutex);
+-                              mutex_exit(&(buf_pool->mutex));
++                              mutex_exit(&(buf_pool->LRU_mutex));
++                              rw_lock_x_unlock(&(buf_pool->hash_latch));
+                               /* Note that the following call will acquire
+                               an S-latch on the page */
+@@ -274,7 +276,8 @@
+               block = UT_LIST_GET_PREV(LRU, block);
+       }
+-      mutex_exit(&(buf_pool->mutex));
++      mutex_exit(&(buf_pool->LRU_mutex));
++      rw_lock_x_unlock(&(buf_pool->hash_latch));
+       
+       if (!all_freed) {
+               os_thread_sleep(20000);
+@@ -297,14 +300,14 @@
+       ulint           len;
+       ulint           limit;
+-      mutex_enter(&(buf_pool->mutex));
++      mutex_enter(&(buf_pool->LRU_mutex));
+       len = UT_LIST_GET_LEN(buf_pool->LRU);
+       if (len < BUF_LRU_OLD_MIN_LEN) {
+               /* The LRU list is too short to do read-ahead */
+-              mutex_exit(&(buf_pool->mutex));
++              mutex_exit(&(buf_pool->LRU_mutex));
+               return(0);
+       }
+@@ -313,7 +316,7 @@
+       limit = block->LRU_position - len / BUF_LRU_INITIAL_RATIO;
+-      mutex_exit(&(buf_pool->mutex));
++      mutex_exit(&(buf_pool->LRU_mutex));
+       return(limit);
+ }
+@@ -337,13 +340,15 @@
+       ulint           distance = 0;
+       ibool           freed;
+-      mutex_enter(&(buf_pool->mutex));
++      /* optimistic search... */
++      //mutex_enter(&(buf_pool->mutex));
+       
++retry:
+       freed = FALSE;
+       block = UT_LIST_GET_LAST(buf_pool->LRU);
+       while (block != NULL) {
+-              ut_a(block->in_LRU_list);
++              //ut_a(block->in_LRU_list); /* optimistic */
+               mutex_enter(&block->mutex);
+@@ -358,9 +363,17 @@
+                       }
+ #endif /* UNIV_DEBUG */
++                      mutex_exit(&block->mutex);
++
++                      mutex_enter(&(buf_pool->LRU_mutex));/* optimistic */
++
++                      rw_lock_x_lock(&(buf_pool->hash_latch));
++                      mutex_enter(&block->mutex);
++                      if(block->in_LRU_list && buf_flush_ready_for_replace(block)) {
+                       buf_LRU_block_remove_hashed_page(block);
++                      rw_lock_x_unlock(&(buf_pool->hash_latch));
+-                      mutex_exit(&(buf_pool->mutex));
++                      mutex_exit(&(buf_pool->LRU_mutex));
+                       mutex_exit(&block->mutex);
+                       /* Remove possible adaptive hash index built on the
+@@ -373,7 +386,6 @@
+                       ut_a(block->buf_fix_count == 0);
+-                      mutex_enter(&(buf_pool->mutex));
+                       mutex_enter(&block->mutex);
+                       buf_LRU_block_free_hashed_page(block);
+@@ -381,6 +393,16 @@
+                       mutex_exit(&block->mutex);
+                       break;
++                      } else { /* someone may interrupt...??? */
++                      mutex_exit(&(buf_pool->LRU_mutex));/* optimistic */
++
++                      rw_lock_x_unlock(&(buf_pool->hash_latch));
++
++                      if (!(block->in_LRU_list)) {
++                              mutex_exit(&block->mutex);
++                              goto retry;
++                      }
++                      }
+               }
+               mutex_exit(&block->mutex);
+@@ -391,6 +413,7 @@
+               if (!freed && n_iterations <= 10
+                   && distance > 100 + (n_iterations * buf_pool->curr_size)
+                                       / 10) {
++                      mutex_enter(&(buf_pool->mutex));
+                       buf_pool->LRU_flush_ended = 0;
+                       mutex_exit(&(buf_pool->mutex));
+@@ -398,6 +421,8 @@
+                       return(FALSE);
+               }
+       }
++
++      mutex_enter(&(buf_pool->mutex));
+       if (buf_pool->LRU_flush_ended > 0) {
+               buf_pool->LRU_flush_ended--;
+       }
+@@ -449,7 +474,8 @@
+ {
+       ibool   ret     = FALSE;
+-      mutex_enter(&(buf_pool->mutex));
++      mutex_enter(&(buf_pool->LRU_mutex));
++      mutex_enter(&(buf_pool->free_mutex));
+       if (!recv_recovery_on && UT_LIST_GET_LEN(buf_pool->free)
+          + UT_LIST_GET_LEN(buf_pool->LRU) < buf_pool->max_size / 4) {
+@@ -457,7 +483,8 @@
+               ret = TRUE;
+       }
+-      mutex_exit(&(buf_pool->mutex));
++      mutex_exit(&(buf_pool->LRU_mutex));
++      mutex_exit(&(buf_pool->free_mutex));
+       return(ret);
+ }
+@@ -480,7 +507,7 @@
+       ibool           mon_value_was   = FALSE;
+       ibool           started_monitor = FALSE;
+ loop:
+-      mutex_enter(&(buf_pool->mutex));
++      //mutex_enter(&(buf_pool->mutex)); /* optimistic */
+       if (!recv_recovery_on && UT_LIST_GET_LEN(buf_pool->free)
+          + UT_LIST_GET_LEN(buf_pool->LRU) < buf_pool->max_size / 20) {
+@@ -536,10 +563,16 @@
+       /* If there is a block in the free list, take it */
+       if (UT_LIST_GET_LEN(buf_pool->free) > 0) {
+               
+-              block = UT_LIST_GET_FIRST(buf_pool->free);
++              mutex_enter(&(buf_pool->free_mutex));
++              block = UT_LIST_GET_LAST(buf_pool->free);
++              if (!block) {
++                      mutex_exit(&(buf_pool->free_mutex));
++                      goto no_block;
++              }
+               ut_a(block->in_free_list);
+               UT_LIST_REMOVE(free, buf_pool->free, block);
+               block->in_free_list = FALSE;
++              mutex_exit(&(buf_pool->free_mutex));
+               ut_a(block->state != BUF_BLOCK_FILE_PAGE);
+               ut_a(!block->in_LRU_list);
+@@ -564,7 +597,7 @@
+               mutex_exit(&block->mutex);
+-              mutex_exit(&(buf_pool->mutex));
++              //mutex_exit(&(buf_pool->mutex));
+               if (started_monitor) {
+                       srv_print_innodb_monitor = mon_value_was;
+@@ -572,11 +605,12 @@
+               return(block);
+       }
++no_block:
+       
+       /* If no block was in the free list, search from the end of the LRU
+       list and try to free a block there */
+-      mutex_exit(&(buf_pool->mutex));
++      //mutex_exit(&(buf_pool->mutex));
+       freed = buf_LRU_search_and_free_block(n_iterations);
+@@ -613,7 +647,7 @@
+       /* No free block was found: try to flush the LRU list */
+-      buf_flush_free_margin();
++      buf_flush_free_margin(TRUE);
+         ++srv_buf_pool_wait_free;
+       os_aio_simulated_wake_handler_threads();
+@@ -655,7 +689,7 @@
+       ut_a(buf_pool->LRU_old);
+ #ifdef UNIV_SYNC_DEBUG
+-      ut_ad(mutex_own(&(buf_pool->mutex)));
++      ut_ad(mutex_own(&(buf_pool->LRU_mutex)));
+ #endif /* UNIV_SYNC_DEBUG */
+       ut_ad(3 * (BUF_LRU_OLD_MIN_LEN / 8) > BUF_LRU_OLD_TOLERANCE + 5);
+@@ -730,7 +764,7 @@
+       ut_ad(buf_pool);
+       ut_ad(block);
+ #ifdef UNIV_SYNC_DEBUG
+-      ut_ad(mutex_own(&(buf_pool->mutex)));
++      ut_ad(mutex_own(&(buf_pool->LRU_mutex)));
+ #endif /* UNIV_SYNC_DEBUG */
+               
+       ut_a(block->state == BUF_BLOCK_FILE_PAGE);
+@@ -796,7 +830,7 @@
+       ut_ad(buf_pool);
+       ut_ad(block);
+ #ifdef UNIV_SYNC_DEBUG
+-      ut_ad(mutex_own(&(buf_pool->mutex)));
++      ut_ad(mutex_own(&(buf_pool->LRU_mutex)));
+ #endif /* UNIV_SYNC_DEBUG */
+       ut_a(block->state == BUF_BLOCK_FILE_PAGE);
+@@ -861,7 +895,7 @@
+       ut_ad(buf_pool);
+       ut_ad(block);
+ #ifdef UNIV_SYNC_DEBUG
+-      ut_ad(mutex_own(&(buf_pool->mutex)));
++      ut_ad(mutex_own(&(buf_pool->LRU_mutex)));
+ #endif /* UNIV_SYNC_DEBUG */
+       ut_a(block->state == BUF_BLOCK_FILE_PAGE);
+@@ -964,7 +998,7 @@
+       buf_block_t*    block)  /* in: block, must not contain a file page */
+ {
+ #ifdef UNIV_SYNC_DEBUG
+-      ut_ad(mutex_own(&(buf_pool->mutex)));
++      //ut_ad(mutex_own(&(buf_pool->mutex)));
+       ut_ad(mutex_own(&block->mutex));
+ #endif /* UNIV_SYNC_DEBUG */
+       ut_ad(block);
+@@ -981,8 +1015,10 @@
+       /* Wipe contents of page to reveal possible stale pointers to it */
+       memset(block->frame, '\0', UNIV_PAGE_SIZE);
+ #endif        
++      mutex_enter(&(buf_pool->free_mutex));
+       UT_LIST_ADD_FIRST(free, buf_pool->free, block);
+       block->in_free_list = TRUE;
++      mutex_exit(&(buf_pool->free_mutex));
+       if (srv_use_awe && block->frame) {
+               /* Add to the list of mapped pages */
+@@ -1004,7 +1040,7 @@
+                               may or may not be a hash index to the page */
+ {
+ #ifdef UNIV_SYNC_DEBUG
+-      ut_ad(mutex_own(&(buf_pool->mutex)));
++      ut_ad(mutex_own(&(buf_pool->LRU_mutex)));
+       ut_ad(mutex_own(&block->mutex));
+ #endif /* UNIV_SYNC_DEBUG */
+       ut_ad(block);
+@@ -1062,7 +1098,7 @@
+                               be in a state where it can be freed */
+ {
+ #ifdef UNIV_SYNC_DEBUG
+-      ut_ad(mutex_own(&(buf_pool->mutex)));
++      //ut_ad(mutex_own(&(buf_pool->mutex)));
+       ut_ad(mutex_own(&block->mutex));
+ #endif /* UNIV_SYNC_DEBUG */
+       ut_a(block->state == BUF_BLOCK_REMOVE_HASH);
+@@ -1085,7 +1121,7 @@
+       ulint           LRU_pos;
+       
+       ut_ad(buf_pool);
+-      mutex_enter(&(buf_pool->mutex));
++      mutex_enter(&(buf_pool->LRU_mutex));
+       if (UT_LIST_GET_LEN(buf_pool->LRU) >= BUF_LRU_OLD_MIN_LEN) {
+@@ -1130,6 +1166,9 @@
+               ut_a(buf_pool->LRU_old_len == old_len);
+       } 
++      mutex_exit(&(buf_pool->LRU_mutex));
++      mutex_enter(&(buf_pool->free_mutex));
++
+       UT_LIST_VALIDATE(free, buf_block_t, buf_pool->free);
+       block = UT_LIST_GET_FIRST(buf_pool->free);
+@@ -1140,7 +1179,7 @@
+               block = UT_LIST_GET_NEXT(free, block);
+       }
+-      mutex_exit(&(buf_pool->mutex));
++      mutex_exit(&(buf_pool->free_mutex));
+       return(TRUE);
+ }
+@@ -1156,7 +1195,7 @@
+       ulint           len;
+       
+       ut_ad(buf_pool);
+-      mutex_enter(&(buf_pool->mutex));
++      mutex_enter(&(buf_pool->LRU_mutex));
+       fprintf(stderr, "Pool ulint clock %lu\n", (ulong) buf_pool->ulint_clock);
+@@ -1200,5 +1239,5 @@
+               }
+       }
+-      mutex_exit(&(buf_pool->mutex));
++      mutex_exit(&(buf_pool->LRU_mutex));
+ }
+diff -r 7ac364cc9b41 innobase/buf/buf0rea.c
+--- a/innobase/buf/buf0rea.c   Fri Jul 03 15:41:50 2009 -0700
++++ b/innobase/buf/buf0rea.c   Fri Jul 03 15:41:57 2009 -0700
+@@ -237,10 +237,12 @@
+               return(0);
+       }       
++      mutex_exit(&(buf_pool->mutex));
+       /* Count how many blocks in the area have been recently accessed,
+       that is, reside near the start of the LRU list. */
++      rw_lock_s_lock(&(buf_pool->hash_latch));
+       for (i = low; i < high; i++) {
+               block = buf_page_hash_get(space, i);
+@@ -252,7 +254,7 @@
+               }
+       }
+-      mutex_exit(&(buf_pool->mutex));
++      rw_lock_s_unlock(&(buf_pool->hash_latch));
+       
+       if (recent_blocks < BUF_READ_AHEAD_RANDOM_THRESHOLD) {
+               /* Do nothing */
+@@ -348,7 +350,7 @@
+       }
+       /* Flush pages from the end of the LRU list if necessary */
+-      buf_flush_free_margin();
++      buf_flush_free_margin(FALSE);
+       return(count + count2);
+ }
+@@ -451,6 +453,7 @@
+               return(0);
+       }       
++      mutex_exit(&(buf_pool->mutex));
+       /* Check that almost all pages in the area have been accessed; if
+       offset == low, the accesses must be in a descending order, otherwise,
+@@ -464,6 +467,7 @@
+       fail_count = 0;
++      rw_lock_s_lock(&(buf_pool->hash_latch));
+       for (i = low; i < high; i++) {
+               block = buf_page_hash_get(space, i);
+               
+@@ -480,12 +484,11 @@
+                       pred_block = block;
+               }
+       }
++      rw_lock_s_unlock(&(buf_pool->hash_latch));
+       if (fail_count > BUF_READ_AHEAD_LINEAR_AREA -
+                        BUF_READ_AHEAD_LINEAR_THRESHOLD) {
+               /* Too many failures: return */
+-
+-              mutex_exit(&(buf_pool->mutex));
+               return(0);
+       }
+@@ -493,10 +496,11 @@
+       /* If we got this far, we know that enough pages in the area have
+       been accessed in the right order: linear read-ahead can be sensible */
++      rw_lock_s_lock(&(buf_pool->hash_latch));
+       block = buf_page_hash_get(space, offset);
+       if (block == NULL) {
+-              mutex_exit(&(buf_pool->mutex));
++              rw_lock_s_unlock(&(buf_pool->hash_latch));
+               return(0);
+       }
+@@ -512,7 +516,7 @@
+       pred_offset = fil_page_get_prev(frame);
+       succ_offset = fil_page_get_next(frame);
+-      mutex_exit(&(buf_pool->mutex));
++      rw_lock_s_unlock(&(buf_pool->hash_latch));
+       
+       if ((offset == low) && (succ_offset == offset + 1)) {
+@@ -588,7 +592,7 @@
+       os_aio_simulated_wake_handler_threads();
+       /* Flush pages from the end of the LRU list if necessary */
+-      buf_flush_free_margin();
++      buf_flush_free_margin(FALSE);
+ #ifdef UNIV_DEBUG
+       if (buf_debug_prints && (count > 0)) {
+@@ -656,7 +660,7 @@
+       os_aio_simulated_wake_handler_threads();
+       /* Flush pages from the end of the LRU list if necessary */
+-      buf_flush_free_margin();
++      buf_flush_free_margin(FALSE);
+ #ifdef UNIV_DEBUG
+       if (buf_debug_prints) {
+@@ -728,7 +732,7 @@
+       os_aio_simulated_wake_handler_threads();
+       /* Flush pages from the end of the LRU list if necessary */
+-      buf_flush_free_margin();
++      buf_flush_free_margin(FALSE);
+ #ifdef UNIV_DEBUG
+       if (buf_debug_prints) {
+diff -r 7ac364cc9b41 innobase/include/buf0buf.h
+--- a/innobase/include/buf0buf.h       Fri Jul 03 15:41:50 2009 -0700
++++ b/innobase/include/buf0buf.h       Fri Jul 03 15:41:57 2009 -0700
+@@ -946,6 +946,7 @@
+       mem_heap_t*     io_counter_heap;
+       ulint           io_counters;
+       hash_table_t*   page_hash;      /* hash table of the file pages */
++      rw_lock_t       hash_latch;
+       ulint           n_pend_reads;   /* number of pending read operations */
+@@ -978,6 +979,7 @@
+       UT_LIST_BASE_NODE_T(buf_block_t) flush_list;
+                                       /* base node of the modified block
+                                       list */
++      mutex_t         flush_list_mutex;
+       ibool           init_flush[BUF_FLUSH_LIST + 1];
+                                       /* this is TRUE when a flush of the
+                                       given type is being initialized */
+@@ -1011,8 +1013,10 @@
+                                       in the case of AWE, at the start are
+                                       always free blocks for which the
+                                       physical memory is mapped to a frame */
++      mutex_t         free_mutex;
+       UT_LIST_BASE_NODE_T(buf_block_t) LRU;
+                                       /* base node of the LRU list */
++      mutex_t         LRU_mutex;
+       buf_block_t*    LRU_old;        /* pointer to the about 3/8 oldest
+                                       blocks in the LRU list; NULL if LRU
+                                       length less than BUF_LRU_OLD_MIN_LEN */
+diff -r 7ac364cc9b41 innobase/include/buf0buf.ic
+--- a/innobase/include/buf0buf.ic      Fri Jul 03 15:41:50 2009 -0700
++++ b/innobase/include/buf0buf.ic      Fri Jul 03 15:41:57 2009 -0700
+@@ -112,7 +112,8 @@
+       buf_block_t*    block;
+       dulint          lsn;
+       
+-      mutex_enter(&(buf_pool->mutex));
++try_again:
++      mutex_enter(&(buf_pool->flush_list_mutex));
+       block = UT_LIST_GET_LAST(buf_pool->flush_list);
+@@ -120,9 +121,13 @@
+               lsn = ut_dulint_zero;
+       } else {
+               lsn = block->oldest_modification;
++              if (ut_dulint_cmp(lsn, ut_dulint_zero) == 0) {
++                      mutex_exit(&(buf_pool->flush_list_mutex));
++                      goto try_again;
++              }
+       }
+-      mutex_exit(&(buf_pool->mutex));
++      mutex_exit(&(buf_pool->flush_list_mutex));
+       return(lsn);
+ }
+@@ -137,7 +142,7 @@
+                       /* out: new clock value */
+ {
+ #ifdef UNIV_SYNC_DEBUG
+-      ut_ad(mutex_own(&(buf_pool->mutex)));
++      ut_ad(mutex_own(&(buf_pool->LRU_mutex)));
+ #endif /* UNIV_SYNC_DEBUG */
+       
+       buf_pool->ulint_clock++;
+@@ -392,18 +397,18 @@
+                               /* out: TRUE if io going on */
+       buf_block_t*    block)  /* in: buf_pool block, must be bufferfixed */
+ {
+-      mutex_enter(&(buf_pool->mutex));
++      mutex_enter(&block->mutex);
+       ut_ad(block->state == BUF_BLOCK_FILE_PAGE);
+       ut_ad(block->buf_fix_count > 0);
+       if (block->io_fix != 0) {
+-              mutex_exit(&(buf_pool->mutex));
++              mutex_exit(&block->mutex);
+               return(TRUE);
+       }
+-      mutex_exit(&(buf_pool->mutex));
++      mutex_exit(&block->mutex);
+       return(FALSE);
+ }
+@@ -425,7 +430,7 @@
+       block = buf_block_align(frame);
+-      mutex_enter(&(buf_pool->mutex));
++      mutex_enter(&block->mutex);
+       if (block->state == BUF_BLOCK_FILE_PAGE) {
+               lsn = block->newest_modification;
+@@ -433,7 +438,7 @@
+               lsn = ut_dulint_zero;
+       }
+-      mutex_exit(&(buf_pool->mutex));
++      mutex_exit(&block->mutex);
+       return(lsn);
+ }
+@@ -456,7 +461,7 @@
+       block = buf_block_align(frame);
+ #ifdef UNIV_SYNC_DEBUG
+-      ut_ad((mutex_own(&(buf_pool->mutex)) && (block->buf_fix_count == 0))
++      ut_ad((mutex_own(&(buf_pool->LRU_mutex)) && (block->buf_fix_count == 0))
+             || rw_lock_own(&(block->lock), RW_LOCK_EXCLUSIVE));
+ #endif /*UNIV_SYNC_DEBUG */
+@@ -477,7 +482,7 @@
+       buf_block_t*    block)  /* in: block */
+ {
+ #ifdef UNIV_SYNC_DEBUG
+-      ut_ad((mutex_own(&(buf_pool->mutex)) && (block->buf_fix_count == 0))
++      ut_ad((mutex_own(&(buf_pool->LRU_mutex)) && (block->buf_fix_count == 0))
+             || rw_lock_own(&(block->lock), RW_LOCK_EXCLUSIVE));
+ #endif /* UNIV_SYNC_DEBUG */
+@@ -555,7 +560,8 @@
+       
+       ut_ad(buf_pool);
+ #ifdef UNIV_SYNC_DEBUG
+-      ut_ad(mutex_own(&(buf_pool->mutex)));
++      ut_ad(rw_lock_own(&(buf_pool->hash_latch), RW_LOCK_EX)
++            || rw_lock_own(&(buf_pool->hash_latch), RW_LOCK_SHARED));
+ #endif /* UNIV_SYNC_DEBUG */
+       /* Look for the page in the hash table */
+@@ -631,11 +637,14 @@
+       ut_a(block->state == BUF_BLOCK_FILE_PAGE);
++      /* buf_flush_note_modification() should be called before this function. */
++/*
+       if (rw_latch == RW_X_LATCH && mtr->modifications) {
+               mutex_enter(&buf_pool->mutex);
+               buf_flush_note_modification(block, mtr);
+               mutex_exit(&buf_pool->mutex);
+       }
++*/
+       mutex_enter(&block->mutex);
+diff -r 7ac364cc9b41 innobase/include/buf0flu.h
+--- a/innobase/include/buf0flu.h       Fri Jul 03 15:41:50 2009 -0700
++++ b/innobase/include/buf0flu.h       Fri Jul 03 15:41:57 2009 -0700
+@@ -26,8 +26,9 @@
+ a margin of replaceable pages there. */
+ void
+-buf_flush_free_margin(void);
++buf_flush_free_margin(
+ /*=======================*/
++      ibool   wait);
+ /************************************************************************
+ Initializes a page for writing to the tablespace. */
+diff -r 7ac364cc9b41 innobase/include/buf0flu.ic
+--- a/innobase/include/buf0flu.ic      Fri Jul 03 15:41:50 2009 -0700
++++ b/innobase/include/buf0flu.ic      Fri Jul 03 15:41:57 2009 -0700
+@@ -38,11 +38,14 @@
+       mtr_t*          mtr)    /* in: mtr */
+ {
+       ut_ad(block);
++
++      mutex_enter(&block->mutex);
++
+       ut_ad(block->state == BUF_BLOCK_FILE_PAGE);
+       ut_ad(block->buf_fix_count > 0);
+ #ifdef UNIV_SYNC_DEBUG
+       ut_ad(rw_lock_own(&(block->lock), RW_LOCK_EX));
+-      ut_ad(mutex_own(&(buf_pool->mutex)));
++      //ut_ad(mutex_own(&(buf_pool->mutex)));
+ #endif /* UNIV_SYNC_DEBUG */
+       ut_ad(ut_dulint_cmp(mtr->start_lsn, ut_dulint_zero) != 0);
+@@ -52,15 +55,19 @@
+       block->newest_modification = mtr->end_lsn;
+       if (ut_dulint_is_zero(block->oldest_modification)) {
++              mutex_enter(&(buf_pool->flush_list_mutex));
+               
+               block->oldest_modification = mtr->start_lsn;
+               ut_ad(!ut_dulint_is_zero(block->oldest_modification));
+               buf_flush_insert_into_flush_list(block);
++              mutex_exit(&(buf_pool->flush_list_mutex));
+       } else {
+               ut_ad(ut_dulint_cmp(block->oldest_modification,
+                                                       mtr->start_lsn) <= 0);
+       }
++
++      mutex_exit(&block->mutex);
+         ++srv_buf_pool_write_requests;
+ }
+@@ -78,29 +85,32 @@
+                                       set of mtr's */
+ {
+       ut_ad(block);
++
++      mutex_enter(&(block->mutex));
++
+       ut_ad(block->state == BUF_BLOCK_FILE_PAGE);
+       ut_ad(block->buf_fix_count > 0);
+ #ifdef UNIV_SYNC_DEBUG
+       ut_ad(rw_lock_own(&(block->lock), RW_LOCK_EX));
+ #endif /* UNIV_SYNC_DEBUG */
+-      mutex_enter(&(buf_pool->mutex));
+-      
+       ut_ad(ut_dulint_cmp(block->newest_modification, end_lsn) <= 0);
+       
+       block->newest_modification = end_lsn;
+       if (ut_dulint_is_zero(block->oldest_modification)) {
++              mutex_enter(&(buf_pool->flush_list_mutex));
+               
+               block->oldest_modification = start_lsn;
+               ut_ad(!ut_dulint_is_zero(block->oldest_modification));
+               buf_flush_insert_sorted_into_flush_list(block);
++              mutex_exit(&(buf_pool->flush_list_mutex));
+       } else {
+               ut_ad(ut_dulint_cmp(block->oldest_modification,
+                                                       start_lsn) <= 0);
+       }
+-      mutex_exit(&(buf_pool->mutex));
++      mutex_exit(&(block->mutex));
+ }
+diff -r 7ac364cc9b41 innobase/include/sync0sync.h
+--- a/innobase/include/sync0sync.h     Fri Jul 03 15:41:50 2009 -0700
++++ b/innobase/include/sync0sync.h     Fri Jul 03 15:41:57 2009 -0700
+@@ -438,8 +438,12 @@
+                                       SYNC_SEARCH_SYS, as memory allocation
+                                       can call routines there! Otherwise
+                                       the level is SYNC_MEM_HASH. */
++#define SYNC_BUF_LRU_LIST     157
++#define SYNC_BUF_PAGE_HASH    156
++#define       SYNC_BUF_BLOCK          155
++#define SYNC_BUF_FREE_LIST    153
+ #define       SYNC_BUF_POOL           150
+-#define       SYNC_BUF_BLOCK          149
++#define SYNC_BUF_FLUSH_LIST   149
+ #define SYNC_DOUBLEWRITE      140
+ #define       SYNC_ANY_LATCH          135
+ #define SYNC_THR_LOCAL                133
+diff -r 7ac364cc9b41 innobase/log/log0recv.c
+--- a/innobase/log/log0recv.c  Fri Jul 03 15:41:50 2009 -0700
++++ b/innobase/log/log0recv.c  Fri Jul 03 15:41:57 2009 -0700
+@@ -1693,11 +1693,11 @@
+       mtr_start(&mtr);
+-      mutex_enter(&(buf_pool->mutex));
++      rw_lock_s_lock(&(buf_pool->hash_latch));
+       page = buf_page_hash_get(space, page_no)->frame;
+-      mutex_exit(&(buf_pool->mutex));
++      rw_lock_s_unlock(&(buf_pool->hash_latch));
+       replica = buf_page_get(space + RECV_REPLICA_SPACE_ADD, page_no,
+                                                       RW_X_LATCH, &mtr);
+diff -r 7ac364cc9b41 innobase/mtr/mtr0mtr.c
+--- a/innobase/mtr/mtr0mtr.c   Fri Jul 03 15:41:50 2009 -0700
++++ b/innobase/mtr/mtr0mtr.c   Fri Jul 03 15:41:57 2009 -0700
+@@ -103,6 +103,38 @@
+       }
+ }
++UNIV_INLINE
++void
++mtr_memo_note_modification_all(
++/*===========================*/
++      mtr_t*  mtr)    /* in: mtr */
++{
++      mtr_memo_slot_t* slot;
++      dyn_array_t*    memo;
++      ulint           offset;
++
++      ut_ad(mtr);
++      ut_ad(mtr->magic_n == MTR_MAGIC_N);
++      ut_ad(mtr->state == MTR_COMMITTING); /* Currently only used in
++                                           commit */
++      ut_ad(mtr->modifications);
++
++      memo = &(mtr->memo);
++
++      offset = dyn_array_get_data_size(memo);
++
++      while (offset > 0) {
++              offset -= sizeof(mtr_memo_slot_t);
++              slot = dyn_array_get_element(memo, offset);
++
++              if (UNIV_LIKELY(slot->object != NULL) &&
++                  slot->type == MTR_MEMO_PAGE_X_FIX) {
++                      buf_flush_note_modification(
++                              (buf_block_t*)slot->object, mtr);
++              }
++      }
++}
++
+ /****************************************************************
+ Writes the contents of a mini-transaction log, if any, to the database log. */
+ static
+@@ -177,6 +209,8 @@
+ #endif
+       if (mtr->modifications) {
+               mtr_log_reserve_and_write(mtr);
++
++              mtr_memo_note_modification_all(mtr);
+       }
+       /* We first update the modification info to buffer pages, and only
+@@ -187,11 +221,12 @@
+       required when we insert modified buffer pages in to the flush list
+       which must be sorted on oldest_modification. */
+       
+-      mtr_memo_pop_all(mtr);
+-
+       if (mtr->modifications) {
+               log_release();
+       }
++
++      /* All unlocking has been moved here, after log_sys mutex release. */
++      mtr_memo_pop_all(mtr);
+ #ifdef UNIV_DEBUG
+       mtr->state = MTR_COMMITTED;
+@@ -262,6 +297,12 @@
+               slot = dyn_array_get_element(memo, offset);
+               if ((object == slot->object) && (type == slot->type)) {
++                      if (mtr->modifications &&
++                          UNIV_LIKELY(slot->object != NULL) &&
++                          slot->type == MTR_MEMO_PAGE_X_FIX) {
++                              buf_flush_note_modification(
++                                      (buf_block_t*)slot->object, mtr);
++                      }
+                       mtr_memo_slot_release(mtr, slot);
+diff -r 7ac364cc9b41 innobase/srv/srv0srv.c
+--- a/innobase/srv/srv0srv.c   Fri Jul 03 15:41:50 2009 -0700
++++ b/innobase/srv/srv0srv.c   Fri Jul 03 15:41:57 2009 -0700
+@@ -367,6 +367,7 @@
+ ulong srv_n_free_tickets_to_enter = 500;
+ ulong srv_thread_sleep_delay = 10000;
+ ulint srv_spin_wait_delay     = 5;
++ulint srv_spins_microsec      = 50;
+ ibool srv_priority_boost      = TRUE;
+ ibool srv_print_thread_releases       = FALSE;
+@@ -673,6 +674,47 @@
+ ulint srv_n_threads_active[SRV_MASTER + 1];
+ ulint srv_n_threads[SRV_MASTER + 1];
++static
++void
++srv_align_spins_microsec(void)
++{
++      ulint   start_sec, end_sec;
++      ulint   start_usec, end_usec;
++      ib_longlong     usecs;
++
++      /* change temporary */
++      srv_spins_microsec = 1;
++
++      if (ut_usectime(&start_sec, &start_usec)) {
++              srv_spins_microsec = 50;
++              goto end;
++      }
++
++      ut_delay(100000);
++
++      if (ut_usectime(&end_sec, &end_usec)) {
++              srv_spins_microsec = 50;
++              goto end;
++      }
++
++      usecs = (end_sec - start_sec) * 1000000LL + (end_usec - start_usec);
++
++      if (usecs) {
++              srv_spins_microsec = 100000 / usecs;
++              if (srv_spins_microsec == 0)
++                      srv_spins_microsec = 1;
++              if (srv_spins_microsec > 50)
++                      srv_spins_microsec = 50;
++      } else {
++              srv_spins_microsec = 50;
++      }
++end:
++      if (srv_spins_microsec != 50)
++              fprintf(stderr,
++                      "InnoDB: unit of spin count at ut_delay() is aligned to %lu\n",
++                      srv_spins_microsec);
++}
++
+ /*************************************************************************
+ Sets the info describing an i/o thread current state. */
+@@ -905,6 +947,8 @@
+       srv_slot_t*             slot;
+       dict_table_t*           table;
+       ulint                   i;
++
++      srv_align_spins_microsec();
+       srv_sys = mem_alloc(sizeof(srv_sys_t));
+@@ -2661,7 +2705,7 @@
+                                       ib_longlong level, bpl;
+                                       buf_block_t* bpage;
+-                                      mutex_enter(&buf_pool->mutex);
++                                      mutex_enter(&(buf_pool->flush_list_mutex));
+                                       level = 0;
+                                       bpage = UT_LIST_GET_FIRST(buf_pool->flush_list);
+@@ -2683,7 +2727,7 @@
+                                               bpl = 0;
+                                       }
+-                                      mutex_exit(&buf_pool->mutex);
++                                      mutex_exit(&(buf_pool->flush_list_mutex));
+                                       if (!srv_use_doublewrite_buf) {
+                                               /* flush is faster than when doublewrite */
+diff -r 7ac364cc9b41 innobase/sync/sync0sync.c
+--- a/innobase/sync/sync0sync.c        Fri Jul 03 15:41:50 2009 -0700
++++ b/innobase/sync/sync0sync.c        Fri Jul 03 15:41:57 2009 -0700
+@@ -1105,11 +1105,19 @@
+       } else if (level == SYNC_DOUBLEWRITE) {
+               ut_a(sync_thread_levels_g(array, SYNC_DOUBLEWRITE));
+       } else if (level == SYNC_BUF_BLOCK) {
+-              ut_a((sync_thread_levels_contain(array, SYNC_BUF_POOL)
++              ut_a((sync_thread_levels_contain(array, SYNC_BUF_LRU_LIST)
+                       && sync_thread_levels_g(array, SYNC_BUF_BLOCK - 1))
+                    || sync_thread_levels_g(array, SYNC_BUF_BLOCK));
+       } else if (level == SYNC_BUF_POOL) {
+               ut_a(sync_thread_levels_g(array, SYNC_BUF_POOL));
++      } else if (level == SYNC_BUF_FLUSH_LIST) {
++              ut_a(sync_thread_levels_g(array, SYNC_BUF_FLUSH_LIST));
++      } else if (level == SYNC_BUF_FREE_LIST) {
++              ut_a(sync_thread_levels_g(array, SYNC_BUF_FREE_LIST));
++      } else if (level == SYNC_BUF_PAGE_HASH) {
++              ut_a(sync_thread_levels_g(array, SYNC_BUF_PAGE_HASH));
++      } else if (level == SYNC_BUF_LRU_LIST) {
++              ut_a(sync_thread_levels_g(array, SYNC_BUF_LRU_LIST));
+       } else if (level == SYNC_SEARCH_SYS) {
+               ut_a(sync_thread_levels_g(array, SYNC_SEARCH_SYS));
+       } else if (level == SYNC_TRX_LOCK_HEAP) {
+diff -r 7ac364cc9b41 innobase/ut/ut0ut.c
+--- a/innobase/ut/ut0ut.c      Fri Jul 03 15:41:50 2009 -0700
++++ b/innobase/ut/ut0ut.c      Fri Jul 03 15:41:57 2009 -0700
+@@ -347,6 +347,7 @@
+ /*****************************************************************
+ Runs an idle loop on CPU. The argument gives the desired delay
+ in microseconds on 100 MHz Pentium + Visual C++. */
++extern ulint  srv_spins_microsec;
+ ulint
+ ut_delay(
+@@ -358,7 +359,11 @@
+       j = 0;
+-      for (i = 0; i < delay * 50; i++) {
++      for (i = 0; i < delay * srv_spins_microsec; i++) {
++#if (defined (__i386__) || defined (__x86_64__)) && defined (__GNUC__)
++              /* it is equal to the instruction 'pause' */
++              __asm__ __volatile__ ("rep; nop");
++#endif
+               j += i;
+       }
+diff -r 7ac364cc9b41 patch_info/innodb_split_buf_pool_mutex.info
+--- /dev/null  Thu Jan 01 00:00:00 1970 +0000
++++ b/patch_info/innodb_split_buf_pool_mutex.info      Fri Jul 03 15:41:57 2009 -0700
+@@ -0,0 +1,6 @@
++File=innodb_split_buf_pool_mutex.patch
++Name=InnoDB patch to fix buffer pool scalability
++Version=1.0
++Author=Yasufumi Kinoshita
++License=BSD
++Comment=Backport from XtraDB
+diff -r 7ac364cc9b41 sql/ha_innodb.cc
+--- a/sql/ha_innodb.cc Fri Jul 03 15:41:50 2009 -0700
++++ b/sql/ha_innodb.cc Fri Jul 03 15:41:57 2009 -0700
+@@ -1503,6 +1503,13 @@
+         /* We set srv_pool_size here in units of 1 kB. InnoDB internally
+         changes the value so that it becomes the number of database pages. */
++      if (innobase_buffer_pool_awe_mem_mb) {
++              /* split_buf_pool_mutex.patch don't support AWE */
++              fputs("InnoDB: Warning: split_buf_pool_mutex.patch don't support AWE. Disabled.\n",
++                      stderr);
++              innobase_buffer_pool_awe_mem_mb = 0;
++      }
++
+         if (innobase_buffer_pool_awe_mem_mb == 0) {
+                 /* Careful here: we first convert the signed long int to ulint
+                 and only after that divide */
index 5e26818e771147f008c6182a43a791df8bc2b404..69802b97866705f8ef9f45a0effcd7af8c26755d 100644 (file)
@@ -1,95 +1,4 @@
 diff -ruN a/innobase/configure b/innobase/configure
---- a/innobase/configure       2009-01-30 06:56:31.000000000 +0900
-+++ b/innobase/configure       2009-05-06 15:40:47.000000000 +0900
-@@ -21306,6 +21306,88 @@
- fi
- done
-+
-+# as http://lists.mysql.com/commits/40686 does
-+{ echo "$as_me:$LINENO: checking whether the compiler provides atomic builtins" >&5
-+echo $ECHO_N "checking whether the compiler provides atomic builtins... $ECHO_C" >&6; }
-+if test "${mysql_cv_atomic_builtins+set}" = set; then
-+  echo $ECHO_N "(cached) $ECHO_C" >&6
-+else
-+  if test "$cross_compiling" = yes; then
-+  { { echo "$as_me:$LINENO: error: cannot run test program while cross compiling
-+See \`config.log' for more details." >&5
-+echo "$as_me: error: cannot run test program while cross compiling
-+See \`config.log' for more details." >&2;}
-+   { (exit 1); exit 1; }; }
-+else
-+  cat >conftest.$ac_ext <<_ACEOF
-+/* confdefs.h.  */
-+_ACEOF
-+cat confdefs.h >>conftest.$ac_ext
-+cat >>conftest.$ac_ext <<_ACEOF
-+/* end confdefs.h.  */
-+
-+  int main()
-+  {
-+    int foo= -10; int bar= 10;
-+    __sync_fetch_and_add(&foo, bar);
-+    if (foo)
-+      return -1;
-+    bar= __sync_lock_test_and_set(&foo, bar);
-+    if (bar || foo != 10)
-+      return -1;
-+    bar= __sync_val_compare_and_swap(&bar, foo, 15);
-+    if (bar)
-+      return -1;
-+    return 0;
-+  }
-+
-+_ACEOF
-+rm -f conftest$ac_exeext
-+if { (ac_try="$ac_link"
-+case "(($ac_try" in
-+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-+  *) ac_try_echo=$ac_try;;
-+esac
-+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-+  (eval "$ac_link") 2>&5
-+  ac_status=$?
-+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+  (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
-+  { (case "(($ac_try" in
-+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-+  *) ac_try_echo=$ac_try;;
-+esac
-+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-+  (eval "$ac_try") 2>&5
-+  ac_status=$?
-+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+  (exit $ac_status); }; }; then
-+  mysql_cv_atomic_builtins=yes
-+else
-+  echo "$as_me: program exited with status $ac_status" >&5
-+echo "$as_me: failed program was:" >&5
-+sed 's/^/| /' conftest.$ac_ext >&5
-+
-+( exit $ac_status )
-+mysql_cv_atomic_builtins=no
-+fi
-+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
-+fi
-+
-+
-+fi
-+{ echo "$as_me:$LINENO: result: $mysql_cv_atomic_builtins" >&5
-+echo "${ECHO_T}$mysql_cv_atomic_builtins" >&6; }
-+
-+if test "x$mysql_cv_atomic_builtins" = xyes; then
-+
-+cat >>confdefs.h <<\_ACEOF
-+#define HAVE_ATOMIC_BUILTINS 1
-+_ACEOF
-+
-+fi
-+
- #AC_CHECK_FUNCS(readdir_r) MySQL checks that it has also the right args.
- # Some versions of Unix only take 2 arguments.
- #AC_C_INLINE  Already checked in MySQL
 diff -ruN a/innobase/configure.in b/innobase/configure.in
 --- a/innobase/configure.in    2009-01-30 06:42:15.000000000 +0900
 +++ b/innobase/configure.in    2009-05-06 15:40:47.000000000 +0900
@@ -367,7 +276,7 @@ diff -ruN a/sql/mysqld.cc b/sql/mysqld.cc
 @@ -5455,6 +5456,11 @@
     "Number of background write I/O threads in InnoDB.",
     (gptr*) &innobase_write_io_threads, (gptr*) &innobase_write_io_threads,
-    0, GET_LONG, REQUIRED_ARG, 1, 1, 64, 0, 0, 0},
+    0, GET_LONG, REQUIRED_ARG, 8, 1, 64, 0, 0, 0},
 +  {"innodb_thread_concurrency_timer_based", OPT_INNODB_THREAD_CONCURRENCY_TIMER_BASED,
 +   "Use InnoDB timer based concurrency throttling. ",
 +   (gptr*) &innobase_thread_concurrency_timer_based,
diff --git a/mysql-innodb_use_sys_malloc.patch b/mysql-innodb_use_sys_malloc.patch
new file mode 100644 (file)
index 0000000..9637315
--- /dev/null
@@ -0,0 +1,265 @@
+diff -ruN a/innobase/include/srv0srv.h b/innobase/include/srv0srv.h
+--- a/innobase/include/srv0srv.h       2009-07-06 15:59:52.000000000 +0900
++++ b/innobase/include/srv0srv.h       2009-07-06 16:06:51.000000000 +0900
+@@ -90,6 +90,7 @@
+ extern ulint  srv_mem_pool_size;
+ extern ulint  srv_lock_table_size;
++extern ibool  srv_use_sys_malloc;
+ extern ibool  srv_thread_concurrency_timer_based;
+ extern ulint  srv_n_file_io_threads;
+diff -ruN a/innobase/include/ut0mem.h b/innobase/include/ut0mem.h
+--- a/innobase/include/ut0mem.h        2009-07-07 21:54:07.000000000 +0900
++++ b/innobase/include/ut0mem.h        2009-08-03 14:42:17.000000000 +0900
+@@ -30,6 +30,13 @@
+ /**************************************************************************
++Initializes the mem block list at database startup. */
++
++void
++ut_mem_block_list_init(void);
++/*========================*/
++
++/**************************************************************************
+ Allocates memory. Sets it also to zero if UNIV_SET_MEM_TO_ZERO is
+ defined and set_to_zero is TRUE. */
+diff -ruN a/innobase/mem/mem0dbg.c b/innobase/mem/mem0dbg.c
+--- a/innobase/mem/mem0dbg.c   2009-05-08 06:12:10.000000000 +0900
++++ b/innobase/mem/mem0dbg.c   2009-07-06 16:48:17.000000000 +0900
+@@ -134,6 +134,14 @@
+       mem_hash_initialized = TRUE;
+ #endif
++      if (UNIV_LIKELY(srv_use_sys_malloc)) {
++              /* When innodb_use_sys_malloc is set, the
++              mem_comm_pool won't be used for any allocations.  We
++              create a dummy mem_comm_pool, because some statistics
++              and debugging code relies on it being initialized. */
++              size = 1;
++      }
++
+       mem_comm_pool = mem_pool_create(size);
+ }
+diff -ruN a/innobase/mem/mem0pool.c b/innobase/mem/mem0pool.c
+--- a/innobase/mem/mem0pool.c  2009-05-08 06:12:10.000000000 +0900
++++ b/innobase/mem/mem0pool.c  2009-07-06 17:22:09.000000000 +0900
+@@ -11,6 +11,7 @@
+ #include "mem0pool.ic"
+ #endif
++#include "srv0srv.h"
+ #include "sync0sync.h"
+ #include "ut0mem.h"
+ #include "ut0lst.h"
+@@ -191,8 +192,6 @@
+       ulint           i;
+       ulint           used;
+-      ut_a(size > 10000);
+-      
+       pool = ut_malloc(sizeof(mem_pool_t));
+       /* We do not set the memory to zero (FALSE) in the pool,
+@@ -330,6 +329,10 @@
+       ulint           n;
+       ibool           ret;
++      if (UNIV_LIKELY(srv_use_sys_malloc)) {
++              return(malloc(size));
++      }
++
+       n = ut_2_log(ut_max(size + MEM_AREA_EXTRA_SIZE, MEM_AREA_MIN_SIZE));
+       mutex_enter(&(pool->mutex));
+@@ -457,6 +460,11 @@
+       ulint           size;
+       ulint           n;
+       
++      if (UNIV_LIKELY(srv_use_sys_malloc)) {
++              free(ptr);
++              return;
++      }
++
+       /* It may be that the area was really allocated from the OS with
+       regular malloc: check if ptr points within our memory pool */
+diff -ruN a/innobase/srv/srv0srv.c b/innobase/srv/srv0srv.c
+--- a/innobase/srv/srv0srv.c   2009-07-06 15:59:52.000000000 +0900
++++ b/innobase/srv/srv0srv.c   2009-07-06 16:08:06.000000000 +0900
+@@ -273,6 +273,7 @@
+ computer. Bigger computers need bigger values. Value 0 will disable the
+ concurrency check. */
++ibool srv_use_sys_malloc = TRUE;
+ ibool srv_thread_concurrency_timer_based = TRUE;
+ ulong srv_thread_concurrency  = 0;
+ ulong   srv_commit_concurrency  = 0;
+@@ -1012,6 +1013,7 @@
+ srv_general_init(void)
+ /*==================*/
+ {
++      ut_mem_block_list_init();
+       os_sync_init();
+       sync_init();
+       mem_init(srv_mem_pool_size);
+diff -ruN a/innobase/srv/srv0start.c b/innobase/srv/srv0start.c
+--- a/innobase/srv/srv0start.c 2009-07-06 15:59:52.000000000 +0900
++++ b/innobase/srv/srv0start.c 2009-07-06 16:23:38.000000000 +0900
+@@ -1040,6 +1040,11 @@
+               return(DB_ERROR);
+       }
++      if (UNIV_LIKELY(srv_use_sys_malloc)) {
++              fprintf(stderr,
++                      "InnoDB: The InnoDB memory heap is disabled\n");
++      }
++
+ #ifdef HAVE_ATOMIC_BUILTINS
+       fprintf(stderr,
+               "InnoDB: use atomic builtins.\n");
+diff -ruN a/innobase/ut/ut0mem.c b/innobase/ut/ut0mem.c
+--- a/innobase/ut/ut0mem.c     2009-05-08 06:12:13.000000000 +0900
++++ b/innobase/ut/ut0mem.c     2009-07-06 16:42:26.000000000 +0900
+@@ -15,6 +15,7 @@
+ #include "mem0mem.h"
+ #include "os0sync.h"
+ #include "os0thread.h"
++#include "srv0srv.h"
+ /* This struct is placed first in every allocated memory block */
+ typedef struct ut_mem_block_struct ut_mem_block_t;
+@@ -43,7 +44,7 @@
+ /**************************************************************************
+ Initializes the mem block list at database startup. */
+-static
++
+ void
+ ut_mem_block_list_init(void)
+ /*========================*/
+@@ -70,11 +71,21 @@
+       ulint   retry_count     = 0;
+       void*   ret;
+-      ut_ad((sizeof(ut_mem_block_t) % 8) == 0); /* check alignment ok */
++      if (UNIV_LIKELY(srv_use_sys_malloc)) {
++              ret = malloc(n);
++              ut_a(ret || !assert_on_error);
+-      if (!ut_mem_block_list_inited) {
+-              ut_mem_block_list_init();
++#ifdef UNIV_SET_MEM_TO_ZERO
++              if (set_to_zero) {
++                      memset(ret, '\0', n);
++              }
++#endif
++              return(ret);
+       }
++
++      ut_ad((sizeof(ut_mem_block_t) % 8) == 0); /* check alignment ok */
++
++      ut_a(ut_mem_block_list_inited);
+ retry:
+       os_fast_mutex_lock(&ut_list_mutex);
+@@ -223,6 +236,11 @@
+ {
+         ut_mem_block_t* block;
++      if (UNIV_LIKELY(srv_use_sys_malloc)) {
++              free(ptr);
++              return;
++      }
++
+       block = (ut_mem_block_t*)((byte*)ptr - sizeof(ut_mem_block_t));
+       os_fast_mutex_lock(&ut_list_mutex);
+@@ -275,6 +293,10 @@
+       ulint           min_size;
+       void*           new_ptr;
++      if (UNIV_LIKELY(srv_use_sys_malloc)) {
++              return(realloc(ptr, size));
++      }
++
+       if (ptr == NULL) {
+               return(ut_malloc(size));
+diff -ruN a/patch_info/innodb_use_sys_malloc.info b/patch_info/innodb_use_sys_malloc.info
+--- /dev/null  1970-01-01 09:00:00.000000000 +0900
++++ b/patch_info/innodb_use_sys_malloc.info    2009-07-06 16:04:24.000000000 +0900
+@@ -0,0 +1,6 @@
++File=innodb_use_sys_malloc.patch
++Name=InnoDB uses malloc directly (backport from InnoDB-Plugin)
++Version=1.0
++Author=Percona <info@percona.com>
++License=GPL
++Comment
+diff -ruN a/sql/ha_innodb.cc b/sql/ha_innodb.cc
+--- a/sql/ha_innodb.cc 2009-07-06 15:59:52.000000000 +0900
++++ b/sql/ha_innodb.cc 2009-07-06 16:10:15.000000000 +0900
+@@ -152,6 +152,7 @@
+      innobase_open_files;
+ long innobase_read_io_threads, innobase_write_io_threads;
++my_bool innobase_use_sys_malloc;
+ my_bool innobase_thread_concurrency_timer_based;
+ long innobase_extra_rsegments;
+ longlong innobase_buffer_pool_size, innobase_log_file_size;
+@@ -1492,6 +1493,8 @@
+       srv_n_log_files = (ulint) innobase_log_files_in_group;
+       srv_log_file_size = (ulint) innobase_log_file_size;
++      srv_use_sys_malloc = (ibool) innobase_use_sys_malloc;
++
+       srv_thread_concurrency_timer_based =
+               (ibool) innobase_thread_concurrency_timer_based;
+diff -ruN a/sql/ha_innodb.h b/sql/ha_innodb.h
+--- a/sql/ha_innodb.h  2009-07-06 15:59:52.000000000 +0900
++++ b/sql/ha_innodb.h  2009-07-06 16:10:42.000000000 +0900
+@@ -205,6 +205,7 @@
+ extern long innobase_buffer_pool_awe_mem_mb;
+ extern long innobase_file_io_threads, innobase_lock_wait_timeout;
+ extern long innobase_read_io_threads, innobase_write_io_threads;
++extern my_bool innobase_use_sys_malloc;
+ extern my_bool innobase_thread_concurrency_timer_based;
+ extern long innobase_extra_rsegments;
+ extern long innobase_force_recovery;
+diff -ruN a/sql/mysqld.cc b/sql/mysqld.cc
+--- a/sql/mysqld.cc    2009-07-06 15:59:52.000000000 +0900
++++ b/sql/mysqld.cc    2009-07-06 16:16:56.000000000 +0900
+@@ -5102,6 +5102,7 @@
+   OPT_INNODB_ADAPTIVE_CHECKPOINT,
+   OPT_INNODB_READ_IO_THREADS,
+   OPT_INNODB_WRITE_IO_THREADS,
++  OPT_INNODB_USE_SYS_MALLOC,
+   OPT_INNODB_THREAD_CONCURRENCY_TIMER_BASED,
+   OPT_INNODB_EXTRA_RSEGMENTS,
+   OPT_INNODB_DICT_SIZE_LIMIT,
+@@ -5470,6 +5471,10 @@
+    "Number of background write I/O threads in InnoDB.",
+    (gptr*) &innobase_write_io_threads, (gptr*) &innobase_write_io_threads,
+    0, GET_LONG, REQUIRED_ARG, 8, 1, 64, 0, 0, 0},
++  {"innodb_use_sys_malloc", OPT_INNODB_USE_SYS_MALLOC,
++   "Use OS memory allocator instead of InnoDB's internal memory allocator",
++   (gptr*) &innobase_use_sys_malloc, (gptr*) &innobase_use_sys_malloc,
++   0, GET_BOOL, NO_ARG, 1, 0, 0, 0, 0, 0},
+   {"innodb_thread_concurrency_timer_based", OPT_INNODB_THREAD_CONCURRENCY_TIMER_BASED,
+    "Use InnoDB timer based concurrency throttling. ",
+    (gptr*) &innobase_thread_concurrency_timer_based,
+diff -ruN a/sql/set_var.cc b/sql/set_var.cc
+--- a/sql/set_var.cc   2009-07-06 15:59:52.000000000 +0900
++++ b/sql/set_var.cc   2009-07-06 16:22:05.000000000 +0900
+@@ -1093,6 +1093,7 @@
+   {sys_innodb_adaptive_checkpoint.name, (char*) &sys_innodb_adaptive_checkpoint, SHOW_SYS},
+   {"innodb_read_io_threads", (char*) &innobase_read_io_threads, SHOW_LONG},
+   {"innodb_write_io_threads", (char*) &innobase_write_io_threads, SHOW_LONG},
++  {"innodb_use_sys_malloc", (char*) &innobase_use_sys_malloc, SHOW_MY_BOOL},
+   {"innodb_thread_concurrency_timer_based", (char*) &innobase_thread_concurrency_timer_based, SHOW_MY_BOOL},
+   {"innodb_extra_rsegments", (char*) &innobase_extra_rsegments, SHOW_LONG},
+   {sys_innodb_dict_size_limit.name, (char*) &sys_innodb_dict_size_limit, SHOW_SYS},
index df6b9d73fc9f724ba63e10de2cf1bf346978b121..11a186c0b4547fd3dc5a8429afbaf6f44e602d8c 100644 (file)
@@ -1,6 +1,6 @@
-diff -r 069dc6d4f269 include/my_getopt.h
---- a/include/my_getopt.h      Mon Jun 01 00:35:20 2009 -0700
-+++ b/include/my_getopt.h      Mon Jun 01 00:35:30 2009 -0700
+diff -r 1242d4575291 include/my_getopt.h
+--- a/include/my_getopt.h      Tue Jul 28 23:39:12 2009 -0700
++++ b/include/my_getopt.h      Tue Jul 28 23:42:44 2009 -0700
 @@ -28,7 +28,8 @@
  #define GET_ULL        8
  #define GET_STR        9
@@ -11,9 +11,9 @@ diff -r 069dc6d4f269 include/my_getopt.h
  
  #define GET_ASK_ADDR   128
  #define GET_TYPE_MASK  127
-diff -r 069dc6d4f269 include/my_time.h
---- a/include/my_time.h        Mon Jun 01 00:35:20 2009 -0700
-+++ b/include/my_time.h        Mon Jun 01 00:35:30 2009 -0700
+diff -r 1242d4575291 include/my_time.h
+--- a/include/my_time.h        Tue Jul 28 23:39:12 2009 -0700
++++ b/include/my_time.h        Tue Jul 28 23:42:44 2009 -0700
 @@ -140,7 +140,7 @@
  int my_date_to_str(const MYSQL_TIME *l_time, char *to);
  int my_datetime_to_str(const MYSQL_TIME *l_time, char *to);
@@ -23,9 +23,9 @@ diff -r 069dc6d4f269 include/my_time.h
  C_MODE_END
  
  #endif /* _my_time_h_ */
-diff -r 069dc6d4f269 innobase/buf/buf0buf.c
---- a/innobase/buf/buf0buf.c   Mon Jun 01 00:35:20 2009 -0700
-+++ b/innobase/buf/buf0buf.c   Mon Jun 01 00:35:30 2009 -0700
+diff -r 1242d4575291 innobase/buf/buf0buf.c
+--- a/innobase/buf/buf0buf.c   Tue Jul 28 23:39:12 2009 -0700
++++ b/innobase/buf/buf0buf.c   Tue Jul 28 23:42:44 2009 -0700
 @@ -37,6 +37,10 @@
  #include "log0log.h"
  #include "trx0undo.h"
@@ -198,9 +198,9 @@ diff -r 069dc6d4f269 innobase/buf/buf0buf.c
        return(TRUE);
  }
  
-diff -r 069dc6d4f269 innobase/buf/buf0rea.c
---- a/innobase/buf/buf0rea.c   Mon Jun 01 00:35:20 2009 -0700
-+++ b/innobase/buf/buf0rea.c   Mon Jun 01 00:35:30 2009 -0700
+diff -r 1242d4575291 innobase/buf/buf0rea.c
+--- a/innobase/buf/buf0rea.c   Tue Jul 28 23:39:12 2009 -0700
++++ b/innobase/buf/buf0rea.c   Tue Jul 28 23:42:44 2009 -0700
 @@ -70,7 +70,8 @@
                        treat the tablespace as dropped; this is a timestamp we
                        use to stop dangling page reads from a tablespace
@@ -317,9 +317,9 @@ diff -r 069dc6d4f269 innobase/buf/buf0rea.c
                }
        }
        
-diff -r 069dc6d4f269 innobase/fil/fil0fil.c
---- a/innobase/fil/fil0fil.c   Mon Jun 01 00:35:20 2009 -0700
-+++ b/innobase/fil/fil0fil.c   Mon Jun 01 00:35:30 2009 -0700
+diff -r 1242d4575291 innobase/fil/fil0fil.c
+--- a/innobase/fil/fil0fil.c   Tue Jul 28 23:39:12 2009 -0700
++++ b/innobase/fil/fil0fil.c   Tue Jul 28 23:42:44 2009 -0700
 @@ -3527,7 +3527,7 @@
                        node->name, node->handle, buf,
                        offset_low, offset_high,
@@ -358,9 +358,9 @@ diff -r 069dc6d4f269 innobase/fil/fil0fil.c
  #endif
        ut_a(ret);
  
-diff -r 069dc6d4f269 innobase/include/buf0rea.h
---- a/innobase/include/buf0rea.h       Mon Jun 01 00:35:20 2009 -0700
-+++ b/innobase/include/buf0rea.h       Mon Jun 01 00:35:30 2009 -0700
+diff -r 1242d4575291 innobase/include/buf0rea.h
+--- a/innobase/include/buf0rea.h       Tue Jul 28 23:39:12 2009 -0700
++++ b/innobase/include/buf0rea.h       Tue Jul 28 23:42:44 2009 -0700
 @@ -10,6 +10,7 @@
  #define buf0rea_h
  
@@ -390,9 +390,9 @@ diff -r 069dc6d4f269 innobase/include/buf0rea.h
  /************************************************************************
  Issues read requests for pages which the ibuf module wants to read in, in
  order to contract the insert buffer tree. Technically, this function is like
-diff -r 069dc6d4f269 innobase/include/fil0fil.h
---- a/innobase/include/fil0fil.h       Mon Jun 01 00:35:20 2009 -0700
-+++ b/innobase/include/fil0fil.h       Mon Jun 01 00:35:30 2009 -0700
+diff -r 1242d4575291 innobase/include/fil0fil.h
+--- a/innobase/include/fil0fil.h       Tue Jul 28 23:39:12 2009 -0700
++++ b/innobase/include/fil0fil.h       Tue Jul 28 23:42:44 2009 -0700
 @@ -534,8 +534,11 @@
  /************************************************************************
  Reads or writes data. This operation is asynchronous (aio). */
@@ -417,9 +417,9 @@ diff -r 069dc6d4f269 innobase/include/fil0fil.h
  /************************************************************************
  Reads data from a space to a buffer. Remember that the possible incomplete
  blocks at the end of file are ignored: they are not taken into account when
-diff -r 069dc6d4f269 innobase/include/os0file.h
---- a/innobase/include/os0file.h       Mon Jun 01 00:35:20 2009 -0700
-+++ b/innobase/include/os0file.h       Mon Jun 01 00:35:30 2009 -0700
+diff -r 1242d4575291 innobase/include/os0file.h
+--- a/innobase/include/os0file.h       Tue Jul 28 23:39:12 2009 -0700
++++ b/innobase/include/os0file.h       Tue Jul 28 23:42:44 2009 -0700
 @@ -11,6 +11,8 @@
  
  #include "univ.i"
@@ -462,9 +462,9 @@ diff -r 069dc6d4f269 innobase/include/os0file.h
  /****************************************************************************
  Wakes up all async i/o threads so that they know to exit themselves in
  shutdown. */
-diff -r 069dc6d4f269 innobase/include/srv0srv.h
---- a/innobase/include/srv0srv.h       Mon Jun 01 00:35:20 2009 -0700
-+++ b/innobase/include/srv0srv.h       Mon Jun 01 00:35:30 2009 -0700
+diff -r 1242d4575291 innobase/include/srv0srv.h
+--- a/innobase/include/srv0srv.h       Tue Jul 28 23:39:12 2009 -0700
++++ b/innobase/include/srv0srv.h       Tue Jul 28 23:42:44 2009 -0700
 @@ -27,6 +27,8 @@
  #define SRV_AUTO_EXTEND_INCREMENT     \
        (srv_auto_extend_increment * ((1024 * 1024) / UNIV_PAGE_SIZE))
@@ -474,9 +474,9 @@ diff -r 069dc6d4f269 innobase/include/srv0srv.h
  /* This is set to TRUE if the MySQL user has set it in MySQL */
  extern ibool  srv_lower_case_table_names;
  
-diff -r 069dc6d4f269 innobase/include/trx0trx.h
---- a/innobase/include/trx0trx.h       Mon Jun 01 00:35:20 2009 -0700
-+++ b/innobase/include/trx0trx.h       Mon Jun 01 00:35:30 2009 -0700
+diff -r 1242d4575291 innobase/include/trx0trx.h
+--- a/innobase/include/trx0trx.h       Tue Jul 28 23:39:12 2009 -0700
++++ b/innobase/include/trx0trx.h       Tue Jul 28 23:42:44 2009 -0700
 @@ -668,6 +668,17 @@
        /*------------------------------*/
        char detailed_error[256];       /* detailed error message for last
@@ -495,9 +495,9 @@ diff -r 069dc6d4f269 innobase/include/trx0trx.h
  };
  
  #define TRX_MAX_N_THREADS     32      /* maximum number of concurrent
-diff -r 069dc6d4f269 innobase/lock/lock0lock.c
---- a/innobase/lock/lock0lock.c        Mon Jun 01 00:35:20 2009 -0700
-+++ b/innobase/lock/lock0lock.c        Mon Jun 01 00:35:30 2009 -0700
+diff -r 1242d4575291 innobase/lock/lock0lock.c
+--- a/innobase/lock/lock0lock.c        Tue Jul 28 23:39:12 2009 -0700
++++ b/innobase/lock/lock0lock.c        Tue Jul 28 23:42:44 2009 -0700
 @@ -1806,6 +1806,8 @@
  {
        lock_t* lock;
@@ -540,9 +540,9 @@ diff -r 069dc6d4f269 innobase/lock/lock0lock.c
        trx->que_state = TRX_QUE_LOCK_WAIT;
        trx->was_chosen_as_deadlock_victim = FALSE;
        trx->wait_started = time(NULL);
-diff -r 069dc6d4f269 innobase/os/os0file.c
---- a/innobase/os/os0file.c    Mon Jun 01 00:35:20 2009 -0700
-+++ b/innobase/os/os0file.c    Mon Jun 01 00:35:30 2009 -0700
+diff -r 1242d4575291 innobase/os/os0file.c
+--- a/innobase/os/os0file.c    Tue Jul 28 23:39:12 2009 -0700
++++ b/innobase/os/os0file.c    Tue Jul 28 23:42:44 2009 -0700
 @@ -14,6 +14,8 @@
  #include "srv0start.h"
  #include "fil0fil.h"
@@ -705,9 +705,9 @@ diff -r 069dc6d4f269 innobase/os/os0file.c
        if (type == OS_FILE_READ) {
                if (os_aio_use_native_aio) {
  #ifdef WIN_ASYNC_IO
-diff -r 069dc6d4f269 innobase/srv/srv0srv.c
---- a/innobase/srv/srv0srv.c   Mon Jun 01 00:35:20 2009 -0700
-+++ b/innobase/srv/srv0srv.c   Mon Jun 01 00:35:30 2009 -0700
+diff -r 1242d4575291 innobase/srv/srv0srv.c
+--- a/innobase/srv/srv0srv.c   Tue Jul 28 23:39:12 2009 -0700
++++ b/innobase/srv/srv0srv.c   Tue Jul 28 23:42:44 2009 -0700
 @@ -48,6 +48,8 @@
  #include "srv0start.h"
  #include "row0mysql.h"
@@ -760,9 +760,9 @@ diff -r 069dc6d4f269 innobase/srv/srv0srv.c
        os_fast_mutex_lock(&srv_conc_mutex);
  
        srv_conc_n_waiting_threads--;
-diff -r 069dc6d4f269 innobase/trx/trx0trx.c
---- a/innobase/trx/trx0trx.c   Mon Jun 01 00:35:20 2009 -0700
-+++ b/innobase/trx/trx0trx.c   Mon Jun 01 00:35:30 2009 -0700
+diff -r 1242d4575291 innobase/trx/trx0trx.c
+--- a/innobase/trx/trx0trx.c   Tue Jul 28 23:39:12 2009 -0700
++++ b/innobase/trx/trx0trx.c   Tue Jul 28 23:42:44 2009 -0700
 @@ -190,6 +190,15 @@
        trx->global_read_view_heap = mem_heap_create(256);
        trx->global_read_view = NULL;
@@ -863,9 +863,9 @@ diff -r 069dc6d4f269 innobase/trx/trx0trx.c
        trx->que_state = TRX_QUE_RUNNING;
  }
  
-diff -r 069dc6d4f269 mysys/my_getopt.c
---- a/mysys/my_getopt.c        Mon Jun 01 00:35:20 2009 -0700
-+++ b/mysys/my_getopt.c        Mon Jun 01 00:35:30 2009 -0700
+diff -r 1242d4575291 mysys/my_getopt.c
+--- a/mysys/my_getopt.c        Tue Jul 28 23:39:12 2009 -0700
++++ b/mysys/my_getopt.c        Tue Jul 28 23:42:44 2009 -0700
 @@ -827,7 +827,8 @@
  #endif
      break;
@@ -876,7 +876,7 @@ diff -r 069dc6d4f269 mysys/my_getopt.c
      break;
    }
  
-@@ -1061,6 +1061,9 @@
+@@ -1061,6 +1062,9 @@
        case GET_ULONG:
        printf("%lu\n", *((ulong*) value));
        break;
@@ -886,9 +886,9 @@ diff -r 069dc6d4f269 mysys/my_getopt.c
        case GET_LL:
        printf("%s\n", llstr(*((longlong*) value), buff));
        break;
-diff -r 069dc6d4f269 patch_info/microslow_innodb.info
+diff -r 1242d4575291 patch_info/microslow_innodb.info
 --- /dev/null  Thu Jan 01 00:00:00 1970 +0000
-+++ b/patch_info/microslow_innodb.info Mon Jun 01 00:35:30 2009 -0700
++++ b/patch_info/microslow_innodb.info Tue Jul 28 23:42:44 2009 -0700
 @@ -0,0 +1,15 @@
 +File=microslow_innodb.patch
 +Name=Extended statistics in slow.log
@@ -905,9 +905,9 @@ diff -r 069dc6d4f269 patch_info/microslow_innodb.info
 +
 +2008-11
 +Arjen Lentz: Fixups (backward compatibility) by Arjen Lentz <arjen@openquery.com.au>
-diff -r 069dc6d4f269 scripts/mysqldumpslow.sh
---- a/scripts/mysqldumpslow.sh Mon Jun 01 00:35:20 2009 -0700
-+++ b/scripts/mysqldumpslow.sh Mon Jun 01 00:35:30 2009 -0700
+diff -r 1242d4575291 scripts/mysqldumpslow.sh
+--- a/scripts/mysqldumpslow.sh Tue Jul 28 23:39:12 2009 -0700
++++ b/scripts/mysqldumpslow.sh Tue Jul 28 23:42:44 2009 -0700
 @@ -83,8 +83,8 @@
      s/^#? Time: \d{6}\s+\d+:\d+:\d+.*\n//;
      my ($user,$host) = s/^#? User\@Host:\s+(\S+)\s+\@\s+(\S+).*\n// ? ($1,$2) : ('','');
@@ -919,9 +919,9 @@ diff -r 069dc6d4f269 scripts/mysqldumpslow.sh
      $t -= $l unless $opt{l};
  
      # remove fluff that mysqld writes to log when it (re)starts:
-diff -r 069dc6d4f269 sql-common/my_time.c
---- a/sql-common/my_time.c     Mon Jun 01 00:35:20 2009 -0700
-+++ b/sql-common/my_time.c     Mon Jun 01 00:35:30 2009 -0700
+diff -r 1242d4575291 sql-common/my_time.c
+--- a/sql-common/my_time.c     Tue Jul 28 23:39:12 2009 -0700
++++ b/sql-common/my_time.c     Tue Jul 28 23:42:44 2009 -0700
 @@ -1253,3 +1253,37 @@
    return 0;
  }
@@ -960,9 +960,9 @@ diff -r 069dc6d4f269 sql-common/my_time.c
 +    *ltime= newtime;
 +  return newtime;
 +}
-diff -r 069dc6d4f269 sql/filesort.cc
---- a/sql/filesort.cc  Mon Jun 01 00:35:20 2009 -0700
-+++ b/sql/filesort.cc  Mon Jun 01 00:35:30 2009 -0700
+diff -r 1242d4575291 sql/filesort.cc
+--- a/sql/filesort.cc  Tue Jul 28 23:39:12 2009 -0700
++++ b/sql/filesort.cc  Tue Jul 28 23:42:44 2009 -0700
 @@ -180,6 +180,7 @@
    {
      statistic_increment(thd->status_var.filesort_scan_count, &LOCK_status);
@@ -987,9 +987,9 @@ diff -r 069dc6d4f269 sql/filesort.cc
    if (param->not_killable)
    {
      killed= &not_killable;
-diff -r 069dc6d4f269 sql/ha_innodb.cc
---- a/sql/ha_innodb.cc Mon Jun 01 00:35:20 2009 -0700
-+++ b/sql/ha_innodb.cc Mon Jun 01 00:35:30 2009 -0700
+diff -r 1242d4575291 sql/ha_innodb.cc
+--- a/sql/ha_innodb.cc Tue Jul 28 23:39:12 2009 -0700
++++ b/sql/ha_innodb.cc Tue Jul 28 23:42:44 2009 -0700
 @@ -1,3 +1,4 @@
 +
  /* Copyright (C) 2000-2005 MySQL AB & Innobase Oy
@@ -1039,7 +1039,7 @@ diff -r 069dc6d4f269 sql/ha_innodb.cc
        /* The default dir for log files is the datadir of MySQL */
  
        if (!innobase_log_group_home_dir) {
-@@ -4694,6 +4722,12 @@
+@@ -4697,6 +4725,12 @@
                trx->check_unique_secondary = FALSE;
        }
  
@@ -1052,7 +1052,7 @@ diff -r 069dc6d4f269 sql/ha_innodb.cc
        if (lower_case_table_names) {
                srv_lower_case_table_names = TRUE;
        } else {
-@@ -4959,6 +4993,12 @@
+@@ -4962,6 +4996,12 @@
                trx->check_unique_secondary = FALSE;
        }
  
@@ -1065,7 +1065,7 @@ diff -r 069dc6d4f269 sql/ha_innodb.cc
        name_len = strlen(name);
  
        assert(name_len < 1000);
-@@ -5046,6 +5086,12 @@
+@@ -5049,6 +5089,12 @@
                trx->check_foreigns = FALSE;
        }
  
@@ -1078,7 +1078,7 @@ diff -r 069dc6d4f269 sql/ha_innodb.cc
        error = row_drop_database_for_mysql(namebuf, trx);
        my_free(namebuf, MYF(0));
  
-@@ -5112,6 +5158,12 @@
+@@ -5115,6 +5161,12 @@
                trx->check_foreigns = FALSE;
        }
  
@@ -1091,7 +1091,7 @@ diff -r 069dc6d4f269 sql/ha_innodb.cc
        name_len1 = strlen(from);
        name_len2 = strlen(to);
  
-@@ -6119,6 +6171,7 @@
+@@ -6122,6 +6174,7 @@
  {
        row_prebuilt_t* prebuilt = (row_prebuilt_t*) innobase_prebuilt;
        trx_t*          trx;
@@ -1099,7 +1099,7 @@ diff -r 069dc6d4f269 sql/ha_innodb.cc
  
        DBUG_ENTER("ha_innobase::external_lock");
        DBUG_PRINT("enter",("lock_type: %d", lock_type));
-@@ -6242,7 +6295,24 @@
+@@ -6245,7 +6298,24 @@
  
        if (trx->n_mysql_tables_in_use == 0) {
  
@@ -1125,9 +1125,9 @@ diff -r 069dc6d4f269 sql/ha_innodb.cc
                prebuilt->used_in_HANDLER = FALSE;
  
                if (!(thd->options & (OPTION_NOT_AUTOCOMMIT | OPTION_BEGIN))) {
-diff -r 069dc6d4f269 sql/ha_innodb.h
---- a/sql/ha_innodb.h  Mon Jun 01 00:35:20 2009 -0700
-+++ b/sql/ha_innodb.h  Mon Jun 01 00:35:30 2009 -0700
+diff -r 1242d4575291 sql/ha_innodb.h
+--- a/sql/ha_innodb.h  Tue Jul 28 23:39:12 2009 -0700
++++ b/sql/ha_innodb.h  Tue Jul 28 23:42:44 2009 -0700
 @@ -271,6 +271,8 @@
  
  int innobase_start_trx_and_assign_read_view(THD* thd);
@@ -1137,9 +1137,9 @@ diff -r 069dc6d4f269 sql/ha_innodb.h
  /***********************************************************************
  This function is used to prepare X/Open XA distributed transaction   */
  
-diff -r 069dc6d4f269 sql/log.cc
---- a/sql/log.cc       Mon Jun 01 00:35:20 2009 -0700
-+++ b/sql/log.cc       Mon Jun 01 00:35:30 2009 -0700
+diff -r 1242d4575291 sql/log.cc
+--- a/sql/log.cc       Tue Jul 28 23:39:12 2009 -0700
++++ b/sql/log.cc       Tue Jul 28 23:42:44 2009 -0700
 @@ -2289,11 +2289,12 @@
  */
  
@@ -1244,10 +1244,10 @@ diff -r 069dc6d4f269 sql/log.cc
      }
      if (thd->db && strcmp(thd->db,db))
      {                                         // Database changed
-diff -r 069dc6d4f269 sql/log_event.cc
---- a/sql/log_event.cc Mon Jun 01 00:35:20 2009 -0700
-+++ b/sql/log_event.cc Mon Jun 01 00:35:30 2009 -0700
-@@ -2057,6 +2057,7 @@
+diff -r 1242d4575291 sql/log_event.cc
+--- a/sql/log_event.cc Tue Jul 28 23:39:12 2009 -0700
++++ b/sql/log_event.cc Tue Jul 28 23:42:44 2009 -0700
+@@ -2061,6 +2061,7 @@
        /* Execute the query (note that we bypass dispatch_command()) */
        const char* found_semicolon= NULL;
        mysql_parse(thd, thd->query, thd->query_length, &found_semicolon);
@@ -1255,9 +1255,9 @@ diff -r 069dc6d4f269 sql/log_event.cc
  
      }
      else
-diff -r 069dc6d4f269 sql/mysql_priv.h
---- a/sql/mysql_priv.h Mon Jun 01 00:35:20 2009 -0700
-+++ b/sql/mysql_priv.h Mon Jun 01 00:35:30 2009 -0700
+diff -r 1242d4575291 sql/mysql_priv.h
+--- a/sql/mysql_priv.h Tue Jul 28 23:39:12 2009 -0700
++++ b/sql/mysql_priv.h Tue Jul 28 23:42:44 2009 -0700
 @@ -507,6 +507,78 @@
  
  #define STRING_BUFFER_USUAL_SIZE 80
@@ -1355,9 +1355,9 @@ diff -r 069dc6d4f269 sql/mysql_priv.h
  extern my_bool sp_automatic_privileges, opt_noacl;
  extern my_bool opt_old_style_user_limits, trust_function_creators;
  extern uint opt_crash_binlog_innodb;
-diff -r 069dc6d4f269 sql/mysqld.cc
---- a/sql/mysqld.cc    Mon Jun 01 00:35:20 2009 -0700
-+++ b/sql/mysqld.cc    Mon Jun 01 00:35:30 2009 -0700
+diff -r 1242d4575291 sql/mysqld.cc
+--- a/sql/mysqld.cc    Tue Jul 28 23:39:12 2009 -0700
++++ b/sql/mysqld.cc    Tue Jul 28 23:42:44 2009 -0700
 @@ -176,7 +176,6 @@
  static void getvolumeID(BYTE *volumeName);
  #endif /* __NETWARE__ */
@@ -1568,9 +1568,9 @@ diff -r 069dc6d4f269 sql/mysqld.cc
    if (argc > 0)
    {
      fprintf(stderr, "%s: Too many arguments (first extra is '%s').\nUse --help to get a list of available options\n", my_progname, *argv);
-diff -r 069dc6d4f269 sql/set_var.cc
---- a/sql/set_var.cc   Mon Jun 01 00:35:20 2009 -0700
-+++ b/sql/set_var.cc   Mon Jun 01 00:35:30 2009 -0700
+diff -r 1242d4575291 sql/set_var.cc
+--- a/sql/set_var.cc   Tue Jul 28 23:39:12 2009 -0700
++++ b/sql/set_var.cc   Tue Jul 28 23:42:44 2009 -0700
 @@ -217,9 +217,13 @@
    sys_log_queries_not_using_indexes("log_queries_not_using_indexes",
                                      &opt_log_queries_not_using_indexes);
@@ -1751,7 +1751,7 @@ diff -r 069dc6d4f269 sql/set_var.cc
  #ifdef HAVE_REPLICATION
  bool sys_var_slave_skip_counter::check(THD *thd, set_var *var)
  {
-@@ -3534,6 +3616,191 @@
+@@ -3549,6 +3631,191 @@
  #endif
  }
  
@@ -1943,9 +1943,9 @@ diff -r 069dc6d4f269 sql/set_var.cc
  /****************************************************************************
   Functions to handle table_type
  ****************************************************************************/
-diff -r 069dc6d4f269 sql/set_var.h
---- a/sql/set_var.h    Mon Jun 01 00:35:20 2009 -0700
-+++ b/sql/set_var.h    Mon Jun 01 00:35:30 2009 -0700
+diff -r 1242d4575291 sql/set_var.h
+--- a/sql/set_var.h    Tue Jul 28 23:39:12 2009 -0700
++++ b/sql/set_var.h    Tue Jul 28 23:42:44 2009 -0700
 @@ -132,6 +132,7 @@
  };
  
@@ -2079,7 +2079,7 @@ diff -r 069dc6d4f269 sql/set_var.h
  class sys_var_thd_storage_engine :public sys_var_thd
  {
  protected:
-@@ -1087,3 +1165,11 @@
+@@ -1109,3 +1187,11 @@
  bool process_key_caches(int (* func) (const char *name, KEY_CACHE *));
  void delete_elements(I_List<NAMED_LIST> *list,
                     void (*free_element)(const char*, gptr));
@@ -2091,10 +2091,10 @@ diff -r 069dc6d4f269 sql/set_var.h
 +                               const ulong none_val, const ulong invalid_val);
 +const char *msl_option_get_name(const struct msl_opts *opts, ulong val);
 +char *msl_flag_get_name(const struct msl_opts *opts, char *buf, ulong val);
-diff -r 069dc6d4f269 sql/slave.cc
---- a/sql/slave.cc     Mon Jun 01 00:35:20 2009 -0700
-+++ b/sql/slave.cc     Mon Jun 01 00:35:30 2009 -0700
-@@ -2975,6 +2975,12 @@
+diff -r 1242d4575291 sql/slave.cc
+--- a/sql/slave.cc     Tue Jul 28 23:39:12 2009 -0700
++++ b/sql/slave.cc     Tue Jul 28 23:42:44 2009 -0700
+@@ -2983,6 +2983,12 @@
      + MAX_LOG_EVENT_HEADER;  /* note, incr over the global not session var */
    thd->slave_thread = 1;
    set_slave_thread_options(thd);
@@ -2107,9 +2107,9 @@ diff -r 069dc6d4f269 sql/slave.cc
    thd->client_capabilities = CLIENT_LOCAL_FILES;
    thd->real_id=pthread_self();
    pthread_mutex_lock(&LOCK_thread_count);
-diff -r 069dc6d4f269 sql/sql_cache.cc
---- a/sql/sql_cache.cc Mon Jun 01 00:35:20 2009 -0700
-+++ b/sql/sql_cache.cc Mon Jun 01 00:35:30 2009 -0700
+diff -r 1242d4575291 sql/sql_cache.cc
+--- a/sql/sql_cache.cc Tue Jul 28 23:39:12 2009 -0700
++++ b/sql/sql_cache.cc Tue Jul 28 23:42:44 2009 -0700
 @@ -1402,6 +1402,7 @@
  
    thd->limit_found_rows = query->found_rows();
@@ -2126,9 +2126,9 @@ diff -r 069dc6d4f269 sql/sql_cache.cc
    DBUG_RETURN(0);                             // Query was not cached
  }
  
-diff -r 069dc6d4f269 sql/sql_class.cc
---- a/sql/sql_class.cc Mon Jun 01 00:35:20 2009 -0700
-+++ b/sql/sql_class.cc Mon Jun 01 00:35:30 2009 -0700
+diff -r 1242d4575291 sql/sql_class.cc
+--- a/sql/sql_class.cc Tue Jul 28 23:39:12 2009 -0700
++++ b/sql/sql_class.cc Tue Jul 28 23:42:44 2009 -0700
 @@ -190,7 +190,7 @@
     table_map_for_update(0),
     global_read_lock(0), is_fatal_error(0),
@@ -2179,9 +2179,9 @@ diff -r 069dc6d4f269 sql/sql_class.cc
  }
  
  
-diff -r 069dc6d4f269 sql/sql_class.h
---- a/sql/sql_class.h  Mon Jun 01 00:35:20 2009 -0700
-+++ b/sql/sql_class.h  Mon Jun 01 00:35:30 2009 -0700
+diff -r 1242d4575291 sql/sql_class.h
+--- a/sql/sql_class.h  Tue Jul 28 23:39:12 2009 -0700
++++ b/sql/sql_class.h  Tue Jul 28 23:42:44 2009 -0700
 @@ -43,6 +43,7 @@
  extern char internal_table_name[2];
  extern char empty_c_string[1];
@@ -2296,9 +2296,9 @@ diff -r 069dc6d4f269 sql/sql_class.h
    inline void insert_id(ulonglong id_arg)
    {
      last_insert_id= id_arg;
-diff -r 069dc6d4f269 sql/sql_parse.cc
---- a/sql/sql_parse.cc Mon Jun 01 00:35:20 2009 -0700
-+++ b/sql/sql_parse.cc Mon Jun 01 00:35:30 2009 -0700
+diff -r 1242d4575291 sql/sql_parse.cc
+--- a/sql/sql_parse.cc Tue Jul 28 23:39:12 2009 -0700
++++ b/sql/sql_parse.cc Tue Jul 28 23:42:44 2009 -0700
 @@ -20,6 +20,7 @@
  #include <m_ctype.h>
  #include <myisam.h>
@@ -2323,7 +2323,7 @@ diff -r 069dc6d4f269 sql/sql_parse.cc
      while (!net->error && net->vio != 0 &&
             !(thd->killed == THD::KILL_CONNECTION))
      {
-@@ -2353,28 +2363,58 @@
+@@ -2353,28 +2363,57 @@
      return;                                     // Don't set time for sub stmt
  
    start_of_query= thd->start_time;
@@ -2378,13 +2378,12 @@ diff -r 069dc6d4f269 sql/sql_parse.cc
 -        thd->lex->orig_sql_command == SQLCOM_END))
 +    if (((ulong) (thd->start_timer - thd->timer_after_lock) >=
 +         thd->variables.long_query_time ||
-+         ((thd->server_status &
++         (thd->server_status &
 +              (SERVER_QUERY_NO_INDEX_USED | SERVER_QUERY_NO_GOOD_INDEX_USED)) &&
 +         opt_log_queries_not_using_indexes &&
 +         /* == SQLCOM_END unless this is a SHOW command */
-+         thd->lex->orig_sql_command == SQLCOM_END)) &&
++         thd->lex->orig_sql_command == SQLCOM_END) &&
 +        thd->examined_row_count >= thd->variables.min_examined_row_limit)
-+
      {
        thd_proc_info(thd, "logging slow query");
        thd->status_var.long_query_count++;
@@ -2393,7 +2392,7 @@ diff -r 069dc6d4f269 sql/sql_parse.cc
      }
    }
  }
-@@ -2669,6 +2709,8 @@
+@@ -2669,6 +2708,8 @@
      context.resolve_in_table_list_only((TABLE_LIST*)select_lex->
                                         table_list.first);
  
@@ -2402,7 +2401,7 @@ diff -r 069dc6d4f269 sql/sql_parse.cc
    /*
      Reset warning count for each query that uses tables
      A better approach would be to reset this for any commands
-@@ -6203,6 +6245,15 @@
+@@ -6203,6 +6244,15 @@
      thd->total_warn_count=0;                  // Warnings for this query
      thd->rand_used= 0;
      thd->sent_row_count= thd->examined_row_count= 0;
@@ -2418,10 +2417,10 @@ diff -r 069dc6d4f269 sql/sql_parse.cc
    }
    DBUG_VOID_RETURN;
  }
-diff -r 069dc6d4f269 sql/sql_select.cc
---- a/sql/sql_select.cc        Mon Jun 01 00:35:20 2009 -0700
-+++ b/sql/sql_select.cc        Mon Jun 01 00:35:30 2009 -0700
-@@ -6262,8 +6262,11 @@
+diff -r 1242d4575291 sql/sql_select.cc
+--- a/sql/sql_select.cc        Tue Jul 28 23:39:12 2009 -0700
++++ b/sql/sql_select.cc        Tue Jul 28 23:42:44 2009 -0700
+@@ -6272,8 +6272,11 @@
          {
            join->thd->server_status|=SERVER_QUERY_NO_INDEX_USED;
            if (statistics)
@@ -2433,7 +2432,7 @@ diff -r 069dc6d4f269 sql/sql_select.cc
          }
        }
        else
-@@ -6278,8 +6281,11 @@
+@@ -6288,8 +6291,11 @@
          {
            join->thd->server_status|=SERVER_QUERY_NO_INDEX_USED;
            if (statistics)
@@ -2445,7 +2444,7 @@ diff -r 069dc6d4f269 sql/sql_select.cc
          }
        }
        if (!table->no_keyread)
-@@ -9340,6 +9346,7 @@
+@@ -9350,6 +9356,7 @@
                      (ulong) rows_limit,test(group)));
  
    statistic_increment(thd->status_var.created_tmp_tables, &LOCK_status);
@@ -2453,7 +2452,7 @@ diff -r 069dc6d4f269 sql/sql_select.cc
  
    if (use_temp_pool && !(test_flags & TEST_KEEP_TMP_TABLES))
      temp_pool_slot = bitmap_set_next(&temp_pool);
-@@ -10200,6 +10207,7 @@
+@@ -10210,6 +10217,7 @@
    }
    statistic_increment(table->in_use->status_var.created_tmp_disk_tables,
                      &LOCK_status);
@@ -2461,9 +2460,9 @@ diff -r 069dc6d4f269 sql/sql_select.cc
    table->s->db_record_offset= 1;
    DBUG_RETURN(0);
   err:
-diff -r 069dc6d4f269 sql/sql_show.cc
---- a/sql/sql_show.cc  Mon Jun 01 00:35:20 2009 -0700
-+++ b/sql/sql_show.cc  Mon Jun 01 00:35:30 2009 -0700
+diff -r 1242d4575291 sql/sql_show.cc
+--- a/sql/sql_show.cc  Tue Jul 28 23:39:12 2009 -0700
++++ b/sql/sql_show.cc  Tue Jul 28 23:42:44 2009 -0700
 @@ -1560,6 +1560,12 @@
          case SHOW_LONGLONG:
            end= longlong10_to_str(*(longlong*) value, buff, 10);
@@ -2477,9 +2476,9 @@ diff -r 069dc6d4f269 sql/sql_show.cc
          case SHOW_HA_ROWS:
            end= longlong10_to_str((longlong) *(ha_rows*) value, buff, 10);
            break;
-diff -r 069dc6d4f269 sql/structs.h
---- a/sql/structs.h    Mon Jun 01 00:35:20 2009 -0700
-+++ b/sql/structs.h    Mon Jun 01 00:35:30 2009 -0700
+diff -r 1242d4575291 sql/structs.h
+--- a/sql/structs.h    Tue Jul 28 23:39:12 2009 -0700
++++ b/sql/structs.h    Tue Jul 28 23:42:44 2009 -0700
 @@ -168,8 +168,8 @@
  enum SHOW_TYPE
  {
index 703b8b7ae0625614ea0238763b848b3d78b0a3d6..78d35a06e09babe761638e270e76a047414ccb86 100644 (file)
@@ -1,6 +1,6 @@
-diff -r 92e70e675363 patch_info/profiling_slow.info
+diff -r 4636d2e0b0d0 patch_info/profiling_slow.info
 --- /dev/null  Thu Jan 01 00:00:00 1970 +0000
-+++ b/patch_info/profiling_slow.info   Mon Jun 01 00:50:00 2009 -0700
++++ b/patch_info/profiling_slow.info   Fri Jul 03 15:40:29 2009 -0700
 @@ -0,0 +1,9 @@
 +File=profiling_slow.info
 +Name=profiling from SHOW PROFILE to slow.log
@@ -11,9 +11,9 @@ diff -r 92e70e675363 patch_info/profiling_slow.info
 +Changelog
 +2009-05-18
 +Initial implementation
-diff -r 92e70e675363 sql/log.cc
---- a/sql/log.cc       Mon Jun 01 00:48:56 2009 -0700
-+++ b/sql/log.cc       Mon Jun 01 00:50:00 2009 -0700
+diff -r 4636d2e0b0d0 sql/log.cc
+--- a/sql/log.cc       Fri Jul 03 15:40:20 2009 -0700
++++ b/sql/log.cc       Fri Jul 03 15:40:29 2009 -0700
 @@ -2402,6 +2402,11 @@
            tmp_errno=errno;
        }
@@ -26,9 +26,9 @@ diff -r 92e70e675363 sql/log.cc
      if (thd->db && strcmp(thd->db,db))
      {                                         // Database changed
        if (my_b_printf(&log_file,"use %s;\n",thd->db) == (uint) -1)
-diff -r 92e70e675363 sql/mysqld.cc
---- a/sql/mysqld.cc    Mon Jun 01 00:48:56 2009 -0700
-+++ b/sql/mysqld.cc    Mon Jun 01 00:50:00 2009 -0700
+diff -r 4636d2e0b0d0 sql/mysqld.cc
+--- a/sql/mysqld.cc    Fri Jul 03 15:40:20 2009 -0700
++++ b/sql/mysqld.cc    Fri Jul 03 15:40:29 2009 -0700
 @@ -5052,6 +5052,8 @@
    OPT_PORT_OPEN_TIMEOUT,
    OPT_MERGE,
@@ -55,9 +55,9 @@ diff -r 92e70e675363 sql/mysqld.cc
  #endif
    {"relay-log", OPT_RELAY_LOG,
     "The location and name to use for relay logs.",
-diff -r 92e70e675363 sql/set_var.cc
---- a/sql/set_var.cc   Mon Jun 01 00:48:56 2009 -0700
-+++ b/sql/set_var.cc   Mon Jun 01 00:50:00 2009 -0700
+diff -r 4636d2e0b0d0 sql/set_var.cc
+--- a/sql/set_var.cc   Fri Jul 03 15:40:20 2009 -0700
++++ b/sql/set_var.cc   Fri Jul 03 15:40:29 2009 -0700
 @@ -592,6 +592,10 @@
                                        ulonglong(OPTION_PROFILING));
  static sys_var_thd_ulong      sys_profiling_history_size("profiling_history_size",
@@ -70,7 +70,7 @@ diff -r 92e70e675363 sql/set_var.cc
  
  /* Local state variables */
 @@ -764,6 +768,8 @@
- #ifdef ENABLED_PROFILING
+ #if defined(ENABLED_PROFILING) && defined(COMMUNITY_SERVER)
    &sys_profiling,
    &sys_profiling_history_size,
 +  &sys_profiling_server,
@@ -79,7 +79,7 @@ diff -r 92e70e675363 sql/set_var.cc
    &sys_pseudo_thread_id,
    &sys_query_alloc_block_size,
 @@ -1094,6 +1100,8 @@
- #ifdef ENABLED_PROFILING
+ #if defined(ENABLED_PROFILING) && defined(COMMUNITY_SERVER)
    {sys_profiling.name,        (char*) &sys_profiling,               SHOW_SYS},
    {sys_profiling_history_size.name, (char*) &sys_profiling_history_size, SHOW_SYS},
 +  {sys_profiling_server.name, (char*) &sys_profiling_server, SHOW_SYS},
@@ -87,9 +87,9 @@ diff -r 92e70e675363 sql/set_var.cc
  #endif
    {"protocol_version",        (char*) &protocol_version,            SHOW_INT},
    {sys_query_alloc_block_size.name, (char*) &sys_query_alloc_block_size,
-diff -r 92e70e675363 sql/sql_class.h
---- a/sql/sql_class.h  Mon Jun 01 00:48:56 2009 -0700
-+++ b/sql/sql_class.h  Mon Jun 01 00:50:00 2009 -0700
+diff -r 4636d2e0b0d0 sql/sql_class.h
+--- a/sql/sql_class.h  Fri Jul 03 15:40:20 2009 -0700
++++ b/sql/sql_class.h  Fri Jul 03 15:40:29 2009 -0700
 @@ -550,6 +550,8 @@
    ulong optimizer_search_depth;
    ulong preload_buff_size;
@@ -99,9 +99,9 @@ diff -r 92e70e675363 sql/sql_class.h
    ulong query_cache_type;
    ulong log_slow_rate_limit;
    ulong read_buff_size;
-diff -r 92e70e675363 sql/sql_profile.cc
---- a/sql/sql_profile.cc       Mon Jun 01 00:48:56 2009 -0700
-+++ b/sql/sql_profile.cc       Mon Jun 01 00:50:00 2009 -0700
+diff -r 4636d2e0b0d0 sql/sql_profile.cc
+--- a/sql/sql_profile.cc       Fri Jul 03 15:40:20 2009 -0700
++++ b/sql/sql_profile.cc       Fri Jul 03 15:40:29 2009 -0700
 @@ -221,9 +221,22 @@
  */
  void PROF_MEASUREMENT::collect()
@@ -234,9 +234,9 @@ diff -r 92e70e675363 sql/sql_profile.cc
  /**
    Fill the information schema table, "query_profile", as defined in show.cc .
    There are two ways to get to this function:  Selecting from the information
-diff -r 92e70e675363 sql/sql_profile.h
---- a/sql/sql_profile.h        Mon Jun 01 00:48:56 2009 -0700
-+++ b/sql/sql_profile.h        Mon Jun 01 00:50:00 2009 -0700
+diff -r 4636d2e0b0d0 sql/sql_profile.h
+--- a/sql/sql_profile.h        Fri Jul 03 15:40:20 2009 -0700
++++ b/sql/sql_profile.h        Fri Jul 03 15:40:29 2009 -0700
 @@ -193,6 +193,7 @@
    unsigned int line;
  
index 26aa3169e33281bb7870bf8ac25b77e3d2059933..78625a67c90f43796c96840c88aa57b9c9eb3f29 100644 (file)
@@ -1,6 +1,6 @@
-diff -r 1ac0113deff5 BUILD/Makefile.in
---- a/BUILD/Makefile.in        Mon Jun 01 00:35:44 2009 -0700
-+++ b/BUILD/Makefile.in        Mon Jun 01 00:36:01 2009 -0700
+diff -r 592f6c3641ba BUILD/Makefile.in
+--- a/BUILD/Makefile.in        Wed Jul 29 13:33:34 2009 -0700
++++ b/BUILD/Makefile.in        Wed Jul 29 13:34:11 2009 -0700
 @@ -146,6 +146,7 @@
  LIBDL = @LIBDL@
  LIBEDIT_LOBJECTS = @LIBEDIT_LOBJECTS@
@@ -9,9 +9,9 @@ diff -r 1ac0113deff5 BUILD/Makefile.in
  LIBS = @LIBS@
  LIBTOOL = @LIBTOOL@
  LIB_EXTRA_CCFLAGS = @LIB_EXTRA_CCFLAGS@
-diff -r 1ac0113deff5 Docs/Makefile.in
---- a/Docs/Makefile.in Mon Jun 01 00:35:44 2009 -0700
-+++ b/Docs/Makefile.in Mon Jun 01 00:36:01 2009 -0700
+diff -r 592f6c3641ba Docs/Makefile.in
+--- a/Docs/Makefile.in Wed Jul 29 13:33:34 2009 -0700
++++ b/Docs/Makefile.in Wed Jul 29 13:34:11 2009 -0700
 @@ -144,6 +144,7 @@
  LIBDL = @LIBDL@
  LIBEDIT_LOBJECTS = @LIBEDIT_LOBJECTS@
@@ -20,9 +20,9 @@ diff -r 1ac0113deff5 Docs/Makefile.in
  LIBS = @LIBS@
  LIBTOOL = @LIBTOOL@
  LIB_EXTRA_CCFLAGS = @LIB_EXTRA_CCFLAGS@
-diff -r 1ac0113deff5 Makefile.in
---- a/Makefile.in      Mon Jun 01 00:35:44 2009 -0700
-+++ b/Makefile.in      Mon Jun 01 00:36:01 2009 -0700
+diff -r 592f6c3641ba Makefile.in
+--- a/Makefile.in      Wed Jul 29 13:33:34 2009 -0700
++++ b/Makefile.in      Wed Jul 29 13:34:11 2009 -0700
 @@ -171,6 +171,7 @@
  LIBDL = @LIBDL@
  LIBEDIT_LOBJECTS = @LIBEDIT_LOBJECTS@
@@ -31,9 +31,9 @@ diff -r 1ac0113deff5 Makefile.in
  LIBS = @LIBS@
  LIBTOOL = @LIBTOOL@
  LIB_EXTRA_CCFLAGS = @LIB_EXTRA_CCFLAGS@
-diff -r 1ac0113deff5 SSL/Makefile.in
---- a/SSL/Makefile.in  Mon Jun 01 00:35:44 2009 -0700
-+++ b/SSL/Makefile.in  Mon Jun 01 00:36:01 2009 -0700
+diff -r 592f6c3641ba SSL/Makefile.in
+--- a/SSL/Makefile.in  Wed Jul 29 13:33:34 2009 -0700
++++ b/SSL/Makefile.in  Wed Jul 29 13:34:11 2009 -0700
 @@ -144,6 +144,7 @@
  LIBDL = @LIBDL@
  LIBEDIT_LOBJECTS = @LIBEDIT_LOBJECTS@
@@ -42,9 +42,9 @@ diff -r 1ac0113deff5 SSL/Makefile.in
  LIBS = @LIBS@
  LIBTOOL = @LIBTOOL@
  LIB_EXTRA_CCFLAGS = @LIB_EXTRA_CCFLAGS@
-diff -r 1ac0113deff5 client/Makefile.in
---- a/client/Makefile.in       Mon Jun 01 00:35:44 2009 -0700
-+++ b/client/Makefile.in       Mon Jun 01 00:36:01 2009 -0700
+diff -r 592f6c3641ba client/Makefile.in
+--- a/client/Makefile.in       Wed Jul 29 13:33:34 2009 -0700
++++ b/client/Makefile.in       Wed Jul 29 13:34:11 2009 -0700
 @@ -247,6 +247,7 @@
  LIBDL = @LIBDL@
  LIBEDIT_LOBJECTS = @LIBEDIT_LOBJECTS@
@@ -53,9 +53,9 @@ diff -r 1ac0113deff5 client/Makefile.in
  LIBS = @CLIENT_LIBS@
  LIBTOOL = @LIBTOOL@
  LIB_EXTRA_CCFLAGS = @LIB_EXTRA_CCFLAGS@
-diff -r 1ac0113deff5 cmd-line-utils/Makefile.in
---- a/cmd-line-utils/Makefile.in       Mon Jun 01 00:35:44 2009 -0700
-+++ b/cmd-line-utils/Makefile.in       Mon Jun 01 00:36:01 2009 -0700
+diff -r 592f6c3641ba cmd-line-utils/Makefile.in
+--- a/cmd-line-utils/Makefile.in       Wed Jul 29 13:33:34 2009 -0700
++++ b/cmd-line-utils/Makefile.in       Wed Jul 29 13:34:11 2009 -0700
 @@ -157,6 +157,7 @@
  LIBDL = @LIBDL@
  LIBEDIT_LOBJECTS = @LIBEDIT_LOBJECTS@
@@ -64,9 +64,9 @@ diff -r 1ac0113deff5 cmd-line-utils/Makefile.in
  LIBS = @LIBS@
  LIBTOOL = @LIBTOOL@
  LIB_EXTRA_CCFLAGS = @LIB_EXTRA_CCFLAGS@
-diff -r 1ac0113deff5 cmd-line-utils/libedit/Makefile.in
---- a/cmd-line-utils/libedit/Makefile.in       Mon Jun 01 00:35:44 2009 -0700
-+++ b/cmd-line-utils/libedit/Makefile.in       Mon Jun 01 00:36:01 2009 -0700
+diff -r 592f6c3641ba cmd-line-utils/libedit/Makefile.in
+--- a/cmd-line-utils/libedit/Makefile.in       Wed Jul 29 13:33:34 2009 -0700
++++ b/cmd-line-utils/libedit/Makefile.in       Wed Jul 29 13:34:11 2009 -0700
 @@ -166,6 +166,7 @@
  LIBDL = @LIBDL@
  LIBEDIT_LOBJECTS = @LIBEDIT_LOBJECTS@
@@ -75,9 +75,9 @@ diff -r 1ac0113deff5 cmd-line-utils/libedit/Makefile.in
  LIBS = @LIBS@
  LIBTOOL = @LIBTOOL@
  LIB_EXTRA_CCFLAGS = @LIB_EXTRA_CCFLAGS@
-diff -r 1ac0113deff5 cmd-line-utils/readline/Makefile.in
---- a/cmd-line-utils/readline/Makefile.in      Mon Jun 01 00:35:44 2009 -0700
-+++ b/cmd-line-utils/readline/Makefile.in      Mon Jun 01 00:36:01 2009 -0700
+diff -r 592f6c3641ba cmd-line-utils/readline/Makefile.in
+--- a/cmd-line-utils/readline/Makefile.in      Wed Jul 29 13:33:34 2009 -0700
++++ b/cmd-line-utils/readline/Makefile.in      Wed Jul 29 13:34:11 2009 -0700
 @@ -173,6 +173,7 @@
  LIBDL = @LIBDL@
  LIBEDIT_LOBJECTS = @LIBEDIT_LOBJECTS@
@@ -86,10 +86,11 @@ diff -r 1ac0113deff5 cmd-line-utils/readline/Makefile.in
  LIBS = @LIBS@
  LIBTOOL = @LIBTOOL@
  LIB_EXTRA_CCFLAGS = @LIB_EXTRA_CCFLAGS@
-diff -r 1ac0113deff5 configure.in
---- a/configure.in     Mon Jun 01 00:35:44 2009 -0700
-+++ b/configure.in     Mon Jun 01 00:36:01 2009 -0700
-@@ -2122,7 +2122,18 @@
+diff -r 592f6c3641ba configure
+diff -r 592f6c3641ba configure.in
+--- a/configure.in     Wed Jul 29 13:33:34 2009 -0700
++++ b/configure.in     Wed Jul 29 13:34:11 2009 -0700
+@@ -2136,7 +2136,18 @@
        # We also disable for SCO for the time being, the headers for the
        # thread library we use conflicts with other headers.
      ;;
@@ -109,7 +110,7 @@ diff -r 1ac0113deff5 configure.in
      ;;
  esac
  
-@@ -2758,7 +2769,7 @@
+@@ -2772,7 +2783,7 @@
    AC_DEFINE([THREAD_SAFE_CLIENT], [1], [Should be client be thread safe])
  fi
  
@@ -118,9 +119,9 @@ diff -r 1ac0113deff5 configure.in
  
  AC_SUBST(CLIENT_LIBS)
  AC_SUBST(NON_THREADED_LIBS)
-diff -r 1ac0113deff5 dbug/Makefile.in
---- a/dbug/Makefile.in Mon Jun 01 00:35:44 2009 -0700
-+++ b/dbug/Makefile.in Mon Jun 01 00:36:01 2009 -0700
+diff -r 592f6c3641ba dbug/Makefile.in
+--- a/dbug/Makefile.in Wed Jul 29 13:33:34 2009 -0700
++++ b/dbug/Makefile.in Wed Jul 29 13:34:11 2009 -0700
 @@ -192,6 +192,7 @@
  LIBDL = @LIBDL@
  LIBEDIT_LOBJECTS = @LIBEDIT_LOBJECTS@
@@ -129,9 +130,9 @@ diff -r 1ac0113deff5 dbug/Makefile.in
  LIBS = @LIBS@
  LIBTOOL = @LIBTOOL@
  LIB_EXTRA_CCFLAGS = @LIB_EXTRA_CCFLAGS@
-diff -r 1ac0113deff5 extra/Makefile.in
---- a/extra/Makefile.in        Mon Jun 01 00:35:44 2009 -0700
-+++ b/extra/Makefile.in        Mon Jun 01 00:36:01 2009 -0700
+diff -r 592f6c3641ba extra/Makefile.in
+--- a/extra/Makefile.in        Wed Jul 29 13:33:34 2009 -0700
++++ b/extra/Makefile.in        Wed Jul 29 13:34:11 2009 -0700
 @@ -240,6 +240,7 @@
  LIBDL = @LIBDL@
  LIBEDIT_LOBJECTS = @LIBEDIT_LOBJECTS@
@@ -140,9 +141,9 @@ diff -r 1ac0113deff5 extra/Makefile.in
  LIBS = @LIBS@
  LIBTOOL = @LIBTOOL@
  LIB_EXTRA_CCFLAGS = @LIB_EXTRA_CCFLAGS@
-diff -r 1ac0113deff5 extra/yassl/Makefile.in
---- a/extra/yassl/Makefile.in  Mon Jun 01 00:35:44 2009 -0700
-+++ b/extra/yassl/Makefile.in  Mon Jun 01 00:36:01 2009 -0700
+diff -r 592f6c3641ba extra/yassl/Makefile.in
+--- a/extra/yassl/Makefile.in  Wed Jul 29 13:33:34 2009 -0700
++++ b/extra/yassl/Makefile.in  Wed Jul 29 13:34:11 2009 -0700
 @@ -142,6 +142,7 @@
  LIBDL = @LIBDL@
  LIBEDIT_LOBJECTS = @LIBEDIT_LOBJECTS@
@@ -151,9 +152,9 @@ diff -r 1ac0113deff5 extra/yassl/Makefile.in
  LIBS = @LIBS@
  LIBTOOL = @LIBTOOL@
  LIB_EXTRA_CCFLAGS = @LIB_EXTRA_CCFLAGS@
-diff -r 1ac0113deff5 extra/yassl/src/Makefile.in
---- a/extra/yassl/src/Makefile.in      Mon Jun 01 00:35:44 2009 -0700
-+++ b/extra/yassl/src/Makefile.in      Mon Jun 01 00:36:01 2009 -0700
+diff -r 592f6c3641ba extra/yassl/src/Makefile.in
+--- a/extra/yassl/src/Makefile.in      Wed Jul 29 13:33:34 2009 -0700
++++ b/extra/yassl/src/Makefile.in      Wed Jul 29 13:34:11 2009 -0700
 @@ -151,6 +151,7 @@
  LIBDL = @LIBDL@
  LIBEDIT_LOBJECTS = @LIBEDIT_LOBJECTS@
@@ -162,9 +163,9 @@ diff -r 1ac0113deff5 extra/yassl/src/Makefile.in
  LIBS = @LIBS@
  LIBTOOL = @LIBTOOL@
  LIB_EXTRA_CCFLAGS = @LIB_EXTRA_CCFLAGS@
-diff -r 1ac0113deff5 extra/yassl/taocrypt/Makefile.in
---- a/extra/yassl/taocrypt/Makefile.in Mon Jun 01 00:35:44 2009 -0700
-+++ b/extra/yassl/taocrypt/Makefile.in Mon Jun 01 00:36:01 2009 -0700
+diff -r 592f6c3641ba extra/yassl/taocrypt/Makefile.in
+--- a/extra/yassl/taocrypt/Makefile.in Wed Jul 29 13:33:34 2009 -0700
++++ b/extra/yassl/taocrypt/Makefile.in Wed Jul 29 13:34:11 2009 -0700
 @@ -142,6 +142,7 @@
  LIBDL = @LIBDL@
  LIBEDIT_LOBJECTS = @LIBEDIT_LOBJECTS@
@@ -173,9 +174,9 @@ diff -r 1ac0113deff5 extra/yassl/taocrypt/Makefile.in
  LIBS = @LIBS@
  LIBTOOL = @LIBTOOL@
  LIB_EXTRA_CCFLAGS = @LIB_EXTRA_CCFLAGS@
-diff -r 1ac0113deff5 extra/yassl/taocrypt/benchmark/Makefile.in
---- a/extra/yassl/taocrypt/benchmark/Makefile.in       Mon Jun 01 00:35:44 2009 -0700
-+++ b/extra/yassl/taocrypt/benchmark/Makefile.in       Mon Jun 01 00:36:01 2009 -0700
+diff -r 592f6c3641ba extra/yassl/taocrypt/benchmark/Makefile.in
+--- a/extra/yassl/taocrypt/benchmark/Makefile.in       Wed Jul 29 13:33:34 2009 -0700
++++ b/extra/yassl/taocrypt/benchmark/Makefile.in       Wed Jul 29 13:34:11 2009 -0700
 @@ -153,6 +153,7 @@
  LIBDL = @LIBDL@
  LIBEDIT_LOBJECTS = @LIBEDIT_LOBJECTS@
@@ -184,9 +185,9 @@ diff -r 1ac0113deff5 extra/yassl/taocrypt/benchmark/Makefile.in
  LIBS = @LIBS@
  LIBTOOL = @LIBTOOL@
  LIB_EXTRA_CCFLAGS = @LIB_EXTRA_CCFLAGS@
-diff -r 1ac0113deff5 extra/yassl/taocrypt/src/Makefile.in
---- a/extra/yassl/taocrypt/src/Makefile.in     Mon Jun 01 00:35:44 2009 -0700
-+++ b/extra/yassl/taocrypt/src/Makefile.in     Mon Jun 01 00:36:01 2009 -0700
+diff -r 592f6c3641ba extra/yassl/taocrypt/src/Makefile.in
+--- a/extra/yassl/taocrypt/src/Makefile.in     Wed Jul 29 13:33:34 2009 -0700
++++ b/extra/yassl/taocrypt/src/Makefile.in     Wed Jul 29 13:34:11 2009 -0700
 @@ -164,6 +164,7 @@
  LIBDL = @LIBDL@
  LIBEDIT_LOBJECTS = @LIBEDIT_LOBJECTS@
@@ -195,9 +196,9 @@ diff -r 1ac0113deff5 extra/yassl/taocrypt/src/Makefile.in
  LIBS = @LIBS@
  LIBTOOL = @LIBTOOL@
  LIB_EXTRA_CCFLAGS = @LIB_EXTRA_CCFLAGS@
-diff -r 1ac0113deff5 extra/yassl/taocrypt/test/Makefile.in
---- a/extra/yassl/taocrypt/test/Makefile.in    Mon Jun 01 00:35:44 2009 -0700
-+++ b/extra/yassl/taocrypt/test/Makefile.in    Mon Jun 01 00:36:01 2009 -0700
+diff -r 592f6c3641ba extra/yassl/taocrypt/test/Makefile.in
+--- a/extra/yassl/taocrypt/test/Makefile.in    Wed Jul 29 13:33:34 2009 -0700
++++ b/extra/yassl/taocrypt/test/Makefile.in    Wed Jul 29 13:34:11 2009 -0700
 @@ -153,6 +153,7 @@
  LIBDL = @LIBDL@
  LIBEDIT_LOBJECTS = @LIBEDIT_LOBJECTS@
@@ -206,9 +207,9 @@ diff -r 1ac0113deff5 extra/yassl/taocrypt/test/Makefile.in
  LIBS = @LIBS@
  LIBTOOL = @LIBTOOL@
  LIB_EXTRA_CCFLAGS = @LIB_EXTRA_CCFLAGS@
-diff -r 1ac0113deff5 extra/yassl/testsuite/Makefile.in
---- a/extra/yassl/testsuite/Makefile.in        Mon Jun 01 00:35:44 2009 -0700
-+++ b/extra/yassl/testsuite/Makefile.in        Mon Jun 01 00:36:01 2009 -0700
+diff -r 592f6c3641ba extra/yassl/testsuite/Makefile.in
+--- a/extra/yassl/testsuite/Makefile.in        Wed Jul 29 13:33:34 2009 -0700
++++ b/extra/yassl/testsuite/Makefile.in        Wed Jul 29 13:34:11 2009 -0700
 @@ -156,6 +156,7 @@
  LIBDL = @LIBDL@
  LIBEDIT_LOBJECTS = @LIBEDIT_LOBJECTS@
@@ -217,9 +218,9 @@ diff -r 1ac0113deff5 extra/yassl/testsuite/Makefile.in
  LIBS = @LIBS@
  LIBTOOL = @LIBTOOL@
  LIB_EXTRA_CCFLAGS = @LIB_EXTRA_CCFLAGS@
-diff -r 1ac0113deff5 heap/Makefile.in
---- a/heap/Makefile.in Mon Jun 01 00:35:44 2009 -0700
-+++ b/heap/Makefile.in Mon Jun 01 00:36:01 2009 -0700
+diff -r 592f6c3641ba heap/Makefile.in
+--- a/heap/Makefile.in Wed Jul 29 13:33:34 2009 -0700
++++ b/heap/Makefile.in Wed Jul 29 13:34:11 2009 -0700
 @@ -202,6 +202,7 @@
  LIBDL = @LIBDL@
  LIBEDIT_LOBJECTS = @LIBEDIT_LOBJECTS@
@@ -228,9 +229,9 @@ diff -r 1ac0113deff5 heap/Makefile.in
  LIBS = @LIBS@
  LIBTOOL = @LIBTOOL@
  LIB_EXTRA_CCFLAGS = @LIB_EXTRA_CCFLAGS@
-diff -r 1ac0113deff5 include/Makefile.in
---- a/include/Makefile.in      Mon Jun 01 00:35:44 2009 -0700
-+++ b/include/Makefile.in      Mon Jun 01 00:36:01 2009 -0700
+diff -r 592f6c3641ba include/Makefile.in
+--- a/include/Makefile.in      Wed Jul 29 13:33:34 2009 -0700
++++ b/include/Makefile.in      Wed Jul 29 13:34:11 2009 -0700
 @@ -160,6 +160,7 @@
  LIBDL = @LIBDL@
  LIBEDIT_LOBJECTS = @LIBEDIT_LOBJECTS@
@@ -239,10 +240,18 @@ diff -r 1ac0113deff5 include/Makefile.in
  LIBS = @LIBS@
  LIBTOOL = @LIBTOOL@
  LIB_EXTRA_CCFLAGS = @LIB_EXTRA_CCFLAGS@
-diff -r 1ac0113deff5 include/mysql_com.h
---- a/include/mysql_com.h      Mon Jun 01 00:35:44 2009 -0700
-+++ b/include/mysql_com.h      Mon Jun 01 00:36:01 2009 -0700
-@@ -106,6 +106,11 @@
+diff -r 592f6c3641ba include/mysql_com.h
+--- a/include/mysql_com.h      Wed Jul 29 13:33:34 2009 -0700
++++ b/include/mysql_com.h      Wed Jul 29 13:34:11 2009 -0700
+@@ -25,6 +25,7 @@
+ #define USERNAME_LENGTH 16
+ #define SERVER_VERSION_LENGTH 60
+ #define SQLSTATE_LENGTH 5
++#define LIST_PROCESS_HOST_LEN 64
+ /*
+   USER_HOST_BUFF_SIZE -- length of string buffer, that is enough to contain
+@@ -106,6 +107,11 @@
                                           thread */
  #define REFRESH_MASTER          128     /* Remove all bin logs in the index
                                           and truncate the index */
@@ -254,9 +263,9 @@ diff -r 1ac0113deff5 include/mysql_com.h
  
  /* The following can't be set with mysql_refresh() */
  #define REFRESH_READ_LOCK     16384   /* Lock tables for read */
-diff -r 1ac0113deff5 libmysql/Makefile.in
---- a/libmysql/Makefile.in     Mon Jun 01 00:35:44 2009 -0700
-+++ b/libmysql/Makefile.in     Mon Jun 01 00:36:01 2009 -0700
+diff -r 592f6c3641ba libmysql/Makefile.in
+--- a/libmysql/Makefile.in     Wed Jul 29 13:33:34 2009 -0700
++++ b/libmysql/Makefile.in     Wed Jul 29 13:34:11 2009 -0700
 @@ -224,6 +224,7 @@
  LIBDL = @LIBDL@
  LIBEDIT_LOBJECTS = @LIBEDIT_LOBJECTS@
@@ -265,9 +274,9 @@ diff -r 1ac0113deff5 libmysql/Makefile.in
  LIBS = @CLIENT_LIBS@ 
  LIBTOOL = @LIBTOOL@
  LIB_EXTRA_CCFLAGS = @LIB_EXTRA_CCFLAGS@
-diff -r 1ac0113deff5 libmysql_r/Makefile.in
---- a/libmysql_r/Makefile.in   Mon Jun 01 00:35:44 2009 -0700
-+++ b/libmysql_r/Makefile.in   Mon Jun 01 00:36:01 2009 -0700
+diff -r 592f6c3641ba libmysql_r/Makefile.in
+--- a/libmysql_r/Makefile.in   Wed Jul 29 13:33:34 2009 -0700
++++ b/libmysql_r/Makefile.in   Wed Jul 29 13:34:11 2009 -0700
 @@ -221,6 +221,7 @@
  LIBDL = @LIBDL@
  LIBEDIT_LOBJECTS = @LIBEDIT_LOBJECTS@
@@ -276,9 +285,9 @@ diff -r 1ac0113deff5 libmysql_r/Makefile.in
  LIBS = @LIBS@ @ZLIB_LIBS@ @openssl_libs@
  LIBTOOL = @LIBTOOL@
  LIB_EXTRA_CCFLAGS = @LIB_EXTRA_CCFLAGS@
-diff -r 1ac0113deff5 libmysqld/Makefile.in
---- a/libmysqld/Makefile.in    Mon Jun 01 00:35:44 2009 -0700
-+++ b/libmysqld/Makefile.in    Mon Jun 01 00:36:01 2009 -0700
+diff -r 592f6c3641ba libmysqld/Makefile.in
+--- a/libmysqld/Makefile.in    Wed Jul 29 13:33:34 2009 -0700
++++ b/libmysqld/Makefile.in    Wed Jul 29 13:34:11 2009 -0700
 @@ -246,6 +246,7 @@
  LIBDL = @LIBDL@
  LIBEDIT_LOBJECTS = @LIBEDIT_LOBJECTS@
@@ -287,9 +296,9 @@ diff -r 1ac0113deff5 libmysqld/Makefile.in
  LIBS = @LIBS@
  LIBTOOL = @LIBTOOL@
  LIB_EXTRA_CCFLAGS = @LIB_EXTRA_CCFLAGS@
-diff -r 1ac0113deff5 libmysqld/examples/Makefile.in
---- a/libmysqld/examples/Makefile.in   Mon Jun 01 00:35:44 2009 -0700
-+++ b/libmysqld/examples/Makefile.in   Mon Jun 01 00:36:01 2009 -0700
+diff -r 592f6c3641ba libmysqld/examples/Makefile.in
+--- a/libmysqld/examples/Makefile.in   Wed Jul 29 13:33:34 2009 -0700
++++ b/libmysqld/examples/Makefile.in   Wed Jul 29 13:34:11 2009 -0700
 @@ -192,6 +192,7 @@
  LIBDL = @LIBDL@
  LIBEDIT_LOBJECTS = @LIBEDIT_LOBJECTS@
@@ -298,9 +307,9 @@ diff -r 1ac0113deff5 libmysqld/examples/Makefile.in
  LIBS = @LIBS@ @WRAPLIBS@ @CLIENT_LIBS@ $(yassl_libs)
  LIBTOOL = @LIBTOOL@
  LIB_EXTRA_CCFLAGS = @LIB_EXTRA_CCFLAGS@
-diff -r 1ac0113deff5 man/Makefile.in
---- a/man/Makefile.in  Mon Jun 01 00:35:44 2009 -0700
-+++ b/man/Makefile.in  Mon Jun 01 00:36:01 2009 -0700
+diff -r 592f6c3641ba man/Makefile.in
+--- a/man/Makefile.in  Wed Jul 29 13:33:34 2009 -0700
++++ b/man/Makefile.in  Wed Jul 29 13:34:11 2009 -0700
 @@ -151,6 +151,7 @@
  LIBDL = @LIBDL@
  LIBEDIT_LOBJECTS = @LIBEDIT_LOBJECTS@
@@ -309,9 +318,9 @@ diff -r 1ac0113deff5 man/Makefile.in
  LIBS = @LIBS@
  LIBTOOL = @LIBTOOL@
  LIB_EXTRA_CCFLAGS = @LIB_EXTRA_CCFLAGS@
-diff -r 1ac0113deff5 myisam/Makefile.in
---- a/myisam/Makefile.in       Mon Jun 01 00:35:44 2009 -0700
-+++ b/myisam/Makefile.in       Mon Jun 01 00:36:01 2009 -0700
+diff -r 592f6c3641ba myisam/Makefile.in
+--- a/myisam/Makefile.in       Wed Jul 29 13:33:34 2009 -0700
++++ b/myisam/Makefile.in       Wed Jul 29 13:34:11 2009 -0700
 @@ -235,6 +235,7 @@
  LIBDL = @LIBDL@
  LIBEDIT_LOBJECTS = @LIBEDIT_LOBJECTS@
@@ -320,9 +329,9 @@ diff -r 1ac0113deff5 myisam/Makefile.in
  LIBS = @LIBS@
  LIBTOOL = @LIBTOOL@
  LIB_EXTRA_CCFLAGS = @LIB_EXTRA_CCFLAGS@
-diff -r 1ac0113deff5 myisammrg/Makefile.in
---- a/myisammrg/Makefile.in    Mon Jun 01 00:35:44 2009 -0700
-+++ b/myisammrg/Makefile.in    Mon Jun 01 00:36:01 2009 -0700
+diff -r 592f6c3641ba myisammrg/Makefile.in
+--- a/myisammrg/Makefile.in    Wed Jul 29 13:33:34 2009 -0700
++++ b/myisammrg/Makefile.in    Wed Jul 29 13:34:11 2009 -0700
 @@ -183,6 +183,7 @@
  LIBDL = @LIBDL@
  LIBEDIT_LOBJECTS = @LIBEDIT_LOBJECTS@
@@ -331,9 +340,9 @@ diff -r 1ac0113deff5 myisammrg/Makefile.in
  LIBS = @LIBS@
  LIBTOOL = @LIBTOOL@
  LIB_EXTRA_CCFLAGS = @LIB_EXTRA_CCFLAGS@
-diff -r 1ac0113deff5 mysql-test/Makefile.in
---- a/mysql-test/Makefile.in   Mon Jun 01 00:35:44 2009 -0700
-+++ b/mysql-test/Makefile.in   Mon Jun 01 00:36:01 2009 -0700
+diff -r 592f6c3641ba mysql-test/Makefile.in
+--- a/mysql-test/Makefile.in   Wed Jul 29 13:33:34 2009 -0700
++++ b/mysql-test/Makefile.in   Wed Jul 29 13:34:11 2009 -0700
 @@ -161,6 +161,7 @@
  LIBDL = @LIBDL@
  LIBEDIT_LOBJECTS = @LIBEDIT_LOBJECTS@
@@ -342,9 +351,9 @@ diff -r 1ac0113deff5 mysql-test/Makefile.in
  LIBS = @LIBS@
  LIBTOOL = @LIBTOOL@
  LIB_EXTRA_CCFLAGS = @LIB_EXTRA_CCFLAGS@
-diff -r 1ac0113deff5 mysql-test/ndb/Makefile.in
---- a/mysql-test/ndb/Makefile.in       Mon Jun 01 00:35:44 2009 -0700
-+++ b/mysql-test/ndb/Makefile.in       Mon Jun 01 00:36:01 2009 -0700
+diff -r 592f6c3641ba mysql-test/ndb/Makefile.in
+--- a/mysql-test/ndb/Makefile.in       Wed Jul 29 13:33:34 2009 -0700
++++ b/mysql-test/ndb/Makefile.in       Wed Jul 29 13:34:11 2009 -0700
 @@ -147,6 +147,7 @@
  LIBDL = @LIBDL@
  LIBEDIT_LOBJECTS = @LIBEDIT_LOBJECTS@
@@ -353,9 +362,9 @@ diff -r 1ac0113deff5 mysql-test/ndb/Makefile.in
  LIBS = @LIBS@
  LIBTOOL = @LIBTOOL@
  LIB_EXTRA_CCFLAGS = @LIB_EXTRA_CCFLAGS@
-diff -r 1ac0113deff5 mysql-test/r/information_schema.result
---- a/mysql-test/r/information_schema.result   Mon Jun 01 00:35:44 2009 -0700
-+++ b/mysql-test/r/information_schema.result   Mon Jun 01 00:36:01 2009 -0700
+diff -r 592f6c3641ba mysql-test/r/information_schema.result
+--- a/mysql-test/r/information_schema.result   Wed Jul 29 13:33:34 2009 -0700
++++ b/mysql-test/r/information_schema.result   Wed Jul 29 13:34:11 2009 -0700
 @@ -37,10 +37,12 @@
  select * from v1;
  c
@@ -536,11 +545,11 @@ diff -r 1ac0113deff5 mysql-test/r/information_schema.result
  USER_PRIVILEGES       information_schema.USER_PRIVILEGES      1
 +USER_STATISTICS       information_schema.USER_STATISTICS      1
  VIEWS information_schema.VIEWS        1
show global status like "Uptime_%";
- Variable_name Value
-diff -r 1ac0113deff5 mysql-test/r/information_schema_db.result
---- a/mysql-test/r/information_schema_db.result        Mon Jun 01 00:35:44 2009 -0700
-+++ b/mysql-test/r/information_schema_db.result        Mon Jun 01 00:36:01 2009 -0700
create table t1(f1 int);
+ create view v1 as select f1+1 as a from t1;
+diff -r 592f6c3641ba mysql-test/r/information_schema_db.result
+--- a/mysql-test/r/information_schema_db.result        Wed Jul 29 13:33:34 2009 -0700
++++ b/mysql-test/r/information_schema_db.result        Wed Jul 29 13:34:11 2009 -0700
 @@ -6,10 +6,12 @@
  show tables;
  Tables_in_information_schema
@@ -572,9 +581,9 @@ diff -r 1ac0113deff5 mysql-test/r/information_schema_db.result
  TRIGGERS
  create database `inf%`;
  create database mbase;
-diff -r 1ac0113deff5 mysql-test/r/mysqlshow.result
---- a/mysql-test/r/mysqlshow.result    Mon Jun 01 00:35:44 2009 -0700
-+++ b/mysql-test/r/mysqlshow.result    Mon Jun 01 00:36:01 2009 -0700
+diff -r 592f6c3641ba mysql-test/r/mysqlshow.result
+--- a/mysql-test/r/mysqlshow.result    Wed Jul 29 13:33:34 2009 -0700
++++ b/mysql-test/r/mysqlshow.result    Wed Jul 29 13:34:11 2009 -0700
 @@ -80,10 +80,12 @@
  |                Tables                 |
  +---------------------------------------+
@@ -623,9 +632,9 @@ diff -r 1ac0113deff5 mysql-test/r/mysqlshow.result
  | VIEWS                                 |
  +---------------------------------------+
  Wildcard: inf_rmation_schema
-diff -r 1ac0113deff5 mysys/Makefile.in
---- a/mysys/Makefile.in        Mon Jun 01 00:35:44 2009 -0700
-+++ b/mysys/Makefile.in        Mon Jun 01 00:36:01 2009 -0700
+diff -r 592f6c3641ba mysys/Makefile.in
+--- a/mysys/Makefile.in        Wed Jul 29 13:33:34 2009 -0700
++++ b/mysys/Makefile.in        Wed Jul 29 13:34:11 2009 -0700
 @@ -228,6 +228,7 @@
  LIBDL = @LIBDL@
  LIBEDIT_LOBJECTS = @LIBEDIT_LOBJECTS@
@@ -634,9 +643,9 @@ diff -r 1ac0113deff5 mysys/Makefile.in
  LIBS = @LIBS@
  LIBTOOL = @LIBTOOL@
  LIB_EXTRA_CCFLAGS = @LIB_EXTRA_CCFLAGS@
-diff -r 1ac0113deff5 ndb/Makefile.in
---- a/ndb/Makefile.in  Mon Jun 01 00:35:44 2009 -0700
-+++ b/ndb/Makefile.in  Mon Jun 01 00:36:01 2009 -0700
+diff -r 592f6c3641ba ndb/Makefile.in
+--- a/ndb/Makefile.in  Wed Jul 29 13:33:34 2009 -0700
++++ b/ndb/Makefile.in  Wed Jul 29 13:34:11 2009 -0700
 @@ -171,6 +171,7 @@
  LIBDL = @LIBDL@
  LIBEDIT_LOBJECTS = @LIBEDIT_LOBJECTS@
@@ -645,9 +654,9 @@ diff -r 1ac0113deff5 ndb/Makefile.in
  LIBS = @LIBS@
  LIBTOOL = @LIBTOOL@
  LIB_EXTRA_CCFLAGS = @LIB_EXTRA_CCFLAGS@
-diff -r 1ac0113deff5 ndb/docs/Makefile.in
---- a/ndb/docs/Makefile.in     Mon Jun 01 00:35:44 2009 -0700
-+++ b/ndb/docs/Makefile.in     Mon Jun 01 00:36:01 2009 -0700
+diff -r 592f6c3641ba ndb/docs/Makefile.in
+--- a/ndb/docs/Makefile.in     Wed Jul 29 13:33:34 2009 -0700
++++ b/ndb/docs/Makefile.in     Wed Jul 29 13:34:11 2009 -0700
 @@ -149,6 +149,7 @@
  LIBDL = @LIBDL@
  LIBEDIT_LOBJECTS = @LIBEDIT_LOBJECTS@
@@ -656,9 +665,9 @@ diff -r 1ac0113deff5 ndb/docs/Makefile.in
  LIBS = @LIBS@
  LIBTOOL = @LIBTOOL@
  LIB_EXTRA_CCFLAGS = @LIB_EXTRA_CCFLAGS@
-diff -r 1ac0113deff5 ndb/include/Makefile.in
---- a/ndb/include/Makefile.in  Mon Jun 01 00:35:44 2009 -0700
-+++ b/ndb/include/Makefile.in  Mon Jun 01 00:36:01 2009 -0700
+diff -r 592f6c3641ba ndb/include/Makefile.in
+--- a/ndb/include/Makefile.in  Wed Jul 29 13:33:34 2009 -0700
++++ b/ndb/include/Makefile.in  Wed Jul 29 13:34:11 2009 -0700
 @@ -179,6 +179,7 @@
  LIBDL = @LIBDL@
  LIBEDIT_LOBJECTS = @LIBEDIT_LOBJECTS@
@@ -667,9 +676,9 @@ diff -r 1ac0113deff5 ndb/include/Makefile.in
  LIBS = @LIBS@
  LIBTOOL = @LIBTOOL@
  LIB_EXTRA_CCFLAGS = @LIB_EXTRA_CCFLAGS@
-diff -r 1ac0113deff5 ndb/src/Makefile.in
---- a/ndb/src/Makefile.in      Mon Jun 01 00:35:44 2009 -0700
-+++ b/ndb/src/Makefile.in      Mon Jun 01 00:36:01 2009 -0700
+diff -r 592f6c3641ba ndb/src/Makefile.in
+--- a/ndb/src/Makefile.in      Wed Jul 29 13:33:34 2009 -0700
++++ b/ndb/src/Makefile.in      Wed Jul 29 13:34:11 2009 -0700
 @@ -204,6 +204,7 @@
  LIBDL = @LIBDL@
  LIBEDIT_LOBJECTS = @LIBEDIT_LOBJECTS@
@@ -678,9 +687,9 @@ diff -r 1ac0113deff5 ndb/src/Makefile.in
  LIBS = @LIBS@
  LIBTOOL = @LIBTOOL@
  LIB_EXTRA_CCFLAGS = @LIB_EXTRA_CCFLAGS@
-diff -r 1ac0113deff5 ndb/src/common/Makefile.in
---- a/ndb/src/common/Makefile.in       Mon Jun 01 00:35:44 2009 -0700
-+++ b/ndb/src/common/Makefile.in       Mon Jun 01 00:36:01 2009 -0700
+diff -r 592f6c3641ba ndb/src/common/Makefile.in
+--- a/ndb/src/common/Makefile.in       Wed Jul 29 13:33:34 2009 -0700
++++ b/ndb/src/common/Makefile.in       Wed Jul 29 13:34:11 2009 -0700
 @@ -174,6 +174,7 @@
  LIBDL = @LIBDL@
  LIBEDIT_LOBJECTS = @LIBEDIT_LOBJECTS@
@@ -689,9 +698,9 @@ diff -r 1ac0113deff5 ndb/src/common/Makefile.in
  LIBS = @LIBS@
  LIBTOOL = @LIBTOOL@
  LIB_EXTRA_CCFLAGS = @LIB_EXTRA_CCFLAGS@
-diff -r 1ac0113deff5 ndb/src/common/debugger/Makefile.in
---- a/ndb/src/common/debugger/Makefile.in      Mon Jun 01 00:35:44 2009 -0700
-+++ b/ndb/src/common/debugger/Makefile.in      Mon Jun 01 00:36:01 2009 -0700
+diff -r 592f6c3641ba ndb/src/common/debugger/Makefile.in
+--- a/ndb/src/common/debugger/Makefile.in      Wed Jul 29 13:33:34 2009 -0700
++++ b/ndb/src/common/debugger/Makefile.in      Wed Jul 29 13:34:11 2009 -0700
 @@ -206,6 +206,7 @@
  LIBDL = @LIBDL@
  LIBEDIT_LOBJECTS = @LIBEDIT_LOBJECTS@
@@ -700,9 +709,9 @@ diff -r 1ac0113deff5 ndb/src/common/debugger/Makefile.in
  LIBS = @LIBS@
  LIBTOOL = @LIBTOOL@
  LIB_EXTRA_CCFLAGS = @LIB_EXTRA_CCFLAGS@
-diff -r 1ac0113deff5 ndb/src/common/debugger/signaldata/Makefile.in
---- a/ndb/src/common/debugger/signaldata/Makefile.in   Mon Jun 01 00:35:44 2009 -0700
-+++ b/ndb/src/common/debugger/signaldata/Makefile.in   Mon Jun 01 00:36:01 2009 -0700
+diff -r 592f6c3641ba ndb/src/common/debugger/signaldata/Makefile.in
+--- a/ndb/src/common/debugger/signaldata/Makefile.in   Wed Jul 29 13:33:34 2009 -0700
++++ b/ndb/src/common/debugger/signaldata/Makefile.in   Wed Jul 29 13:34:11 2009 -0700
 @@ -211,6 +211,7 @@
  LIBDL = @LIBDL@
  LIBEDIT_LOBJECTS = @LIBEDIT_LOBJECTS@
@@ -711,9 +720,9 @@ diff -r 1ac0113deff5 ndb/src/common/debugger/signaldata/Makefile.in
  LIBS = @LIBS@
  LIBTOOL = @LIBTOOL@
  LIB_EXTRA_CCFLAGS = @LIB_EXTRA_CCFLAGS@
-diff -r 1ac0113deff5 ndb/src/common/logger/Makefile.in
---- a/ndb/src/common/logger/Makefile.in        Mon Jun 01 00:35:44 2009 -0700
-+++ b/ndb/src/common/logger/Makefile.in        Mon Jun 01 00:36:01 2009 -0700
+diff -r 592f6c3641ba ndb/src/common/logger/Makefile.in
+--- a/ndb/src/common/logger/Makefile.in        Wed Jul 29 13:33:34 2009 -0700
++++ b/ndb/src/common/logger/Makefile.in        Wed Jul 29 13:34:11 2009 -0700
 @@ -197,6 +197,7 @@
  LIBDL = @LIBDL@
  LIBEDIT_LOBJECTS = @LIBEDIT_LOBJECTS@
@@ -722,9 +731,9 @@ diff -r 1ac0113deff5 ndb/src/common/logger/Makefile.in
  LIBS = @LIBS@
  LIBTOOL = @LIBTOOL@
  LIB_EXTRA_CCFLAGS = @LIB_EXTRA_CCFLAGS@
-diff -r 1ac0113deff5 ndb/src/common/mgmcommon/Makefile.in
---- a/ndb/src/common/mgmcommon/Makefile.in     Mon Jun 01 00:35:44 2009 -0700
-+++ b/ndb/src/common/mgmcommon/Makefile.in     Mon Jun 01 00:36:01 2009 -0700
+diff -r 592f6c3641ba ndb/src/common/mgmcommon/Makefile.in
+--- a/ndb/src/common/mgmcommon/Makefile.in     Wed Jul 29 13:33:34 2009 -0700
++++ b/ndb/src/common/mgmcommon/Makefile.in     Wed Jul 29 13:34:11 2009 -0700
 @@ -211,6 +211,7 @@
  LIBDL = @LIBDL@
  LIBEDIT_LOBJECTS = @LIBEDIT_LOBJECTS@
@@ -733,9 +742,9 @@ diff -r 1ac0113deff5 ndb/src/common/mgmcommon/Makefile.in
  LIBS = @LIBS@
  LIBTOOL = @LIBTOOL@
  LIB_EXTRA_CCFLAGS = @LIB_EXTRA_CCFLAGS@
-diff -r 1ac0113deff5 ndb/src/common/portlib/Makefile.in
---- a/ndb/src/common/portlib/Makefile.in       Mon Jun 01 00:35:44 2009 -0700
-+++ b/ndb/src/common/portlib/Makefile.in       Mon Jun 01 00:36:01 2009 -0700
+diff -r 592f6c3641ba ndb/src/common/portlib/Makefile.in
+--- a/ndb/src/common/portlib/Makefile.in       Wed Jul 29 13:33:34 2009 -0700
++++ b/ndb/src/common/portlib/Makefile.in       Wed Jul 29 13:34:11 2009 -0700
 @@ -222,6 +222,7 @@
  LIBDL = @LIBDL@
  LIBEDIT_LOBJECTS = @LIBEDIT_LOBJECTS@
@@ -744,9 +753,9 @@ diff -r 1ac0113deff5 ndb/src/common/portlib/Makefile.in
  LIBS = @LIBS@
  LIBTOOL = @LIBTOOL@
  LIB_EXTRA_CCFLAGS = @LIB_EXTRA_CCFLAGS@
-diff -r 1ac0113deff5 ndb/src/common/transporter/Makefile.in
---- a/ndb/src/common/transporter/Makefile.in   Mon Jun 01 00:35:44 2009 -0700
-+++ b/ndb/src/common/transporter/Makefile.in   Mon Jun 01 00:36:01 2009 -0700
+diff -r 592f6c3641ba ndb/src/common/transporter/Makefile.in
+--- a/ndb/src/common/transporter/Makefile.in   Wed Jul 29 13:33:34 2009 -0700
++++ b/ndb/src/common/transporter/Makefile.in   Wed Jul 29 13:34:11 2009 -0700
 @@ -197,6 +197,7 @@
  LIBDL = @LIBDL@
  LIBEDIT_LOBJECTS = @LIBEDIT_LOBJECTS@
@@ -755,9 +764,9 @@ diff -r 1ac0113deff5 ndb/src/common/transporter/Makefile.in
  LIBS = @LIBS@
  LIBTOOL = @LIBTOOL@
  LIB_EXTRA_CCFLAGS = @LIB_EXTRA_CCFLAGS@
-diff -r 1ac0113deff5 ndb/src/common/util/Makefile.in
---- a/ndb/src/common/util/Makefile.in  Mon Jun 01 00:35:44 2009 -0700
-+++ b/ndb/src/common/util/Makefile.in  Mon Jun 01 00:36:01 2009 -0700
+diff -r 592f6c3641ba ndb/src/common/util/Makefile.in
+--- a/ndb/src/common/util/Makefile.in  Wed Jul 29 13:33:34 2009 -0700
++++ b/ndb/src/common/util/Makefile.in  Wed Jul 29 13:34:11 2009 -0700
 @@ -217,6 +217,7 @@
  LIBDL = @LIBDL@
  LIBEDIT_LOBJECTS = @LIBEDIT_LOBJECTS@
@@ -766,9 +775,9 @@ diff -r 1ac0113deff5 ndb/src/common/util/Makefile.in
  LIBS = @LIBS@
  LIBTOOL = @LIBTOOL@
  LIB_EXTRA_CCFLAGS = @LIB_EXTRA_CCFLAGS@
-diff -r 1ac0113deff5 ndb/src/cw/Makefile.in
---- a/ndb/src/cw/Makefile.in   Mon Jun 01 00:35:44 2009 -0700
-+++ b/ndb/src/cw/Makefile.in   Mon Jun 01 00:36:01 2009 -0700
+diff -r 592f6c3641ba ndb/src/cw/Makefile.in
+--- a/ndb/src/cw/Makefile.in   Wed Jul 29 13:33:34 2009 -0700
++++ b/ndb/src/cw/Makefile.in   Wed Jul 29 13:34:11 2009 -0700
 @@ -156,6 +156,7 @@
  LIBDL = @LIBDL@
  LIBEDIT_LOBJECTS = @LIBEDIT_LOBJECTS@
@@ -777,9 +786,9 @@ diff -r 1ac0113deff5 ndb/src/cw/Makefile.in
  LIBS = @LIBS@
  LIBTOOL = @LIBTOOL@
  LIB_EXTRA_CCFLAGS = @LIB_EXTRA_CCFLAGS@
-diff -r 1ac0113deff5 ndb/src/cw/cpcd/Makefile.in
---- a/ndb/src/cw/cpcd/Makefile.in      Mon Jun 01 00:35:44 2009 -0700
-+++ b/ndb/src/cw/cpcd/Makefile.in      Mon Jun 01 00:36:01 2009 -0700
+diff -r 592f6c3641ba ndb/src/cw/cpcd/Makefile.in
+--- a/ndb/src/cw/cpcd/Makefile.in      Wed Jul 29 13:33:34 2009 -0700
++++ b/ndb/src/cw/cpcd/Makefile.in      Wed Jul 29 13:34:11 2009 -0700
 @@ -207,6 +207,7 @@
  LIBDL = @LIBDL@
  LIBEDIT_LOBJECTS = @LIBEDIT_LOBJECTS@
@@ -788,9 +797,9 @@ diff -r 1ac0113deff5 ndb/src/cw/cpcd/Makefile.in
  LIBS = @LIBS@
  LIBTOOL = @LIBTOOL@
  LIB_EXTRA_CCFLAGS = @LIB_EXTRA_CCFLAGS@
-diff -r 1ac0113deff5 ndb/src/kernel/Makefile.in
---- a/ndb/src/kernel/Makefile.in       Mon Jun 01 00:35:44 2009 -0700
-+++ b/ndb/src/kernel/Makefile.in       Mon Jun 01 00:36:01 2009 -0700
+diff -r 592f6c3641ba ndb/src/kernel/Makefile.in
+--- a/ndb/src/kernel/Makefile.in       Wed Jul 29 13:33:34 2009 -0700
++++ b/ndb/src/kernel/Makefile.in       Wed Jul 29 13:34:11 2009 -0700
 @@ -227,6 +227,7 @@
  LIBDL = @LIBDL@
  LIBEDIT_LOBJECTS = @LIBEDIT_LOBJECTS@
@@ -799,9 +808,9 @@ diff -r 1ac0113deff5 ndb/src/kernel/Makefile.in
  LIBS = @LIBS@
  LIBTOOL = @LIBTOOL@
  LIB_EXTRA_CCFLAGS = @LIB_EXTRA_CCFLAGS@
-diff -r 1ac0113deff5 ndb/src/kernel/blocks/Makefile.in
---- a/ndb/src/kernel/blocks/Makefile.in        Mon Jun 01 00:35:44 2009 -0700
-+++ b/ndb/src/kernel/blocks/Makefile.in        Mon Jun 01 00:36:01 2009 -0700
+diff -r 592f6c3641ba ndb/src/kernel/blocks/Makefile.in
+--- a/ndb/src/kernel/blocks/Makefile.in        Wed Jul 29 13:33:34 2009 -0700
++++ b/ndb/src/kernel/blocks/Makefile.in        Wed Jul 29 13:34:11 2009 -0700
 @@ -156,6 +156,7 @@
  LIBDL = @LIBDL@
  LIBEDIT_LOBJECTS = @LIBEDIT_LOBJECTS@
@@ -810,9 +819,9 @@ diff -r 1ac0113deff5 ndb/src/kernel/blocks/Makefile.in
  LIBS = @LIBS@
  LIBTOOL = @LIBTOOL@
  LIB_EXTRA_CCFLAGS = @LIB_EXTRA_CCFLAGS@
-diff -r 1ac0113deff5 ndb/src/kernel/blocks/backup/Makefile.in
---- a/ndb/src/kernel/blocks/backup/Makefile.in Mon Jun 01 00:35:44 2009 -0700
-+++ b/ndb/src/kernel/blocks/backup/Makefile.in Mon Jun 01 00:36:01 2009 -0700
+diff -r 592f6c3641ba ndb/src/kernel/blocks/backup/Makefile.in
+--- a/ndb/src/kernel/blocks/backup/Makefile.in Wed Jul 29 13:33:34 2009 -0700
++++ b/ndb/src/kernel/blocks/backup/Makefile.in Wed Jul 29 13:34:11 2009 -0700
 @@ -196,6 +196,7 @@
  LIBDL = @LIBDL@
  LIBEDIT_LOBJECTS = @LIBEDIT_LOBJECTS@
@@ -821,9 +830,9 @@ diff -r 1ac0113deff5 ndb/src/kernel/blocks/backup/Makefile.in
  LIBS = @LIBS@
  LIBTOOL = @LIBTOOL@
  LIB_EXTRA_CCFLAGS = @LIB_EXTRA_CCFLAGS@
-diff -r 1ac0113deff5 ndb/src/kernel/blocks/cmvmi/Makefile.in
---- a/ndb/src/kernel/blocks/cmvmi/Makefile.in  Mon Jun 01 00:35:44 2009 -0700
-+++ b/ndb/src/kernel/blocks/cmvmi/Makefile.in  Mon Jun 01 00:36:01 2009 -0700
+diff -r 592f6c3641ba ndb/src/kernel/blocks/cmvmi/Makefile.in
+--- a/ndb/src/kernel/blocks/cmvmi/Makefile.in  Wed Jul 29 13:33:34 2009 -0700
++++ b/ndb/src/kernel/blocks/cmvmi/Makefile.in  Wed Jul 29 13:34:11 2009 -0700
 @@ -196,6 +196,7 @@
  LIBDL = @LIBDL@
  LIBEDIT_LOBJECTS = @LIBEDIT_LOBJECTS@
@@ -832,9 +841,9 @@ diff -r 1ac0113deff5 ndb/src/kernel/blocks/cmvmi/Makefile.in
  LIBS = @LIBS@
  LIBTOOL = @LIBTOOL@
  LIB_EXTRA_CCFLAGS = @LIB_EXTRA_CCFLAGS@
-diff -r 1ac0113deff5 ndb/src/kernel/blocks/dbacc/Makefile.in
---- a/ndb/src/kernel/blocks/dbacc/Makefile.in  Mon Jun 01 00:35:44 2009 -0700
-+++ b/ndb/src/kernel/blocks/dbacc/Makefile.in  Mon Jun 01 00:36:01 2009 -0700
+diff -r 592f6c3641ba ndb/src/kernel/blocks/dbacc/Makefile.in
+--- a/ndb/src/kernel/blocks/dbacc/Makefile.in  Wed Jul 29 13:33:34 2009 -0700
++++ b/ndb/src/kernel/blocks/dbacc/Makefile.in  Wed Jul 29 13:34:11 2009 -0700
 @@ -196,6 +196,7 @@
  LIBDL = @LIBDL@
  LIBEDIT_LOBJECTS = @LIBEDIT_LOBJECTS@
@@ -843,9 +852,9 @@ diff -r 1ac0113deff5 ndb/src/kernel/blocks/dbacc/Makefile.in
  LIBS = @LIBS@
  LIBTOOL = @LIBTOOL@
  LIB_EXTRA_CCFLAGS = @LIB_EXTRA_CCFLAGS@
-diff -r 1ac0113deff5 ndb/src/kernel/blocks/dbdict/Makefile.in
---- a/ndb/src/kernel/blocks/dbdict/Makefile.in Mon Jun 01 00:35:44 2009 -0700
-+++ b/ndb/src/kernel/blocks/dbdict/Makefile.in Mon Jun 01 00:36:01 2009 -0700
+diff -r 592f6c3641ba ndb/src/kernel/blocks/dbdict/Makefile.in
+--- a/ndb/src/kernel/blocks/dbdict/Makefile.in Wed Jul 29 13:33:34 2009 -0700
++++ b/ndb/src/kernel/blocks/dbdict/Makefile.in Wed Jul 29 13:34:11 2009 -0700
 @@ -206,6 +206,7 @@
  LIBDL = @LIBDL@
  LIBEDIT_LOBJECTS = @LIBEDIT_LOBJECTS@
@@ -854,9 +863,9 @@ diff -r 1ac0113deff5 ndb/src/kernel/blocks/dbdict/Makefile.in
  LIBS = @LIBS@
  LIBTOOL = @LIBTOOL@
  LIB_EXTRA_CCFLAGS = @LIB_EXTRA_CCFLAGS@
-diff -r 1ac0113deff5 ndb/src/kernel/blocks/dbdih/Makefile.in
---- a/ndb/src/kernel/blocks/dbdih/Makefile.in  Mon Jun 01 00:35:44 2009 -0700
-+++ b/ndb/src/kernel/blocks/dbdih/Makefile.in  Mon Jun 01 00:36:01 2009 -0700
+diff -r 592f6c3641ba ndb/src/kernel/blocks/dbdih/Makefile.in
+--- a/ndb/src/kernel/blocks/dbdih/Makefile.in  Wed Jul 29 13:33:34 2009 -0700
++++ b/ndb/src/kernel/blocks/dbdih/Makefile.in  Wed Jul 29 13:34:11 2009 -0700
 @@ -203,6 +203,7 @@
  LIBDL = @LIBDL@
  LIBEDIT_LOBJECTS = @LIBEDIT_LOBJECTS@
@@ -865,9 +874,9 @@ diff -r 1ac0113deff5 ndb/src/kernel/blocks/dbdih/Makefile.in
  LIBS = @LIBS@
  LIBTOOL = @LIBTOOL@
  LIB_EXTRA_CCFLAGS = @LIB_EXTRA_CCFLAGS@
-diff -r 1ac0113deff5 ndb/src/kernel/blocks/dblqh/Makefile.in
---- a/ndb/src/kernel/blocks/dblqh/Makefile.in  Mon Jun 01 00:35:44 2009 -0700
-+++ b/ndb/src/kernel/blocks/dblqh/Makefile.in  Mon Jun 01 00:36:01 2009 -0700
+diff -r 592f6c3641ba ndb/src/kernel/blocks/dblqh/Makefile.in
+--- a/ndb/src/kernel/blocks/dblqh/Makefile.in  Wed Jul 29 13:33:34 2009 -0700
++++ b/ndb/src/kernel/blocks/dblqh/Makefile.in  Wed Jul 29 13:34:11 2009 -0700
 @@ -204,6 +204,7 @@
  LIBDL = @LIBDL@
  LIBEDIT_LOBJECTS = @LIBEDIT_LOBJECTS@
@@ -876,9 +885,9 @@ diff -r 1ac0113deff5 ndb/src/kernel/blocks/dblqh/Makefile.in
  LIBS = @LIBS@
  LIBTOOL = @LIBTOOL@
  LIB_EXTRA_CCFLAGS = @LIB_EXTRA_CCFLAGS@
-diff -r 1ac0113deff5 ndb/src/kernel/blocks/dbtc/Makefile.in
---- a/ndb/src/kernel/blocks/dbtc/Makefile.in   Mon Jun 01 00:35:44 2009 -0700
-+++ b/ndb/src/kernel/blocks/dbtc/Makefile.in   Mon Jun 01 00:36:01 2009 -0700
+diff -r 592f6c3641ba ndb/src/kernel/blocks/dbtc/Makefile.in
+--- a/ndb/src/kernel/blocks/dbtc/Makefile.in   Wed Jul 29 13:33:34 2009 -0700
++++ b/ndb/src/kernel/blocks/dbtc/Makefile.in   Wed Jul 29 13:34:11 2009 -0700
 @@ -196,6 +196,7 @@
  LIBDL = @LIBDL@
  LIBEDIT_LOBJECTS = @LIBEDIT_LOBJECTS@
@@ -887,9 +896,9 @@ diff -r 1ac0113deff5 ndb/src/kernel/blocks/dbtc/Makefile.in
  LIBS = @LIBS@
  LIBTOOL = @LIBTOOL@
  LIB_EXTRA_CCFLAGS = @LIB_EXTRA_CCFLAGS@
-diff -r 1ac0113deff5 ndb/src/kernel/blocks/dbtup/Makefile.in
---- a/ndb/src/kernel/blocks/dbtup/Makefile.in  Mon Jun 01 00:35:44 2009 -0700
-+++ b/ndb/src/kernel/blocks/dbtup/Makefile.in  Mon Jun 01 00:36:01 2009 -0700
+diff -r 592f6c3641ba ndb/src/kernel/blocks/dbtup/Makefile.in
+--- a/ndb/src/kernel/blocks/dbtup/Makefile.in  Wed Jul 29 13:33:34 2009 -0700
++++ b/ndb/src/kernel/blocks/dbtup/Makefile.in  Wed Jul 29 13:34:11 2009 -0700
 @@ -204,6 +204,7 @@
  LIBDL = @LIBDL@
  LIBEDIT_LOBJECTS = @LIBEDIT_LOBJECTS@
@@ -898,9 +907,9 @@ diff -r 1ac0113deff5 ndb/src/kernel/blocks/dbtup/Makefile.in
  LIBS = @LIBS@
  LIBTOOL = @LIBTOOL@
  LIB_EXTRA_CCFLAGS = @LIB_EXTRA_CCFLAGS@
-diff -r 1ac0113deff5 ndb/src/kernel/blocks/dbtux/Makefile.in
---- a/ndb/src/kernel/blocks/dbtux/Makefile.in  Mon Jun 01 00:35:44 2009 -0700
-+++ b/ndb/src/kernel/blocks/dbtux/Makefile.in  Mon Jun 01 00:36:01 2009 -0700
+diff -r 592f6c3641ba ndb/src/kernel/blocks/dbtux/Makefile.in
+--- a/ndb/src/kernel/blocks/dbtux/Makefile.in  Wed Jul 29 13:33:34 2009 -0700
++++ b/ndb/src/kernel/blocks/dbtux/Makefile.in  Wed Jul 29 13:34:11 2009 -0700
 @@ -199,6 +199,7 @@
  LIBDL = @LIBDL@
  LIBEDIT_LOBJECTS = @LIBEDIT_LOBJECTS@
@@ -909,9 +918,9 @@ diff -r 1ac0113deff5 ndb/src/kernel/blocks/dbtux/Makefile.in
  LIBS = @LIBS@
  LIBTOOL = @LIBTOOL@
  LIB_EXTRA_CCFLAGS = @LIB_EXTRA_CCFLAGS@
-diff -r 1ac0113deff5 ndb/src/kernel/blocks/dbutil/Makefile.in
---- a/ndb/src/kernel/blocks/dbutil/Makefile.in Mon Jun 01 00:35:44 2009 -0700
-+++ b/ndb/src/kernel/blocks/dbutil/Makefile.in Mon Jun 01 00:36:01 2009 -0700
+diff -r 592f6c3641ba ndb/src/kernel/blocks/dbutil/Makefile.in
+--- a/ndb/src/kernel/blocks/dbutil/Makefile.in Wed Jul 29 13:33:34 2009 -0700
++++ b/ndb/src/kernel/blocks/dbutil/Makefile.in Wed Jul 29 13:34:11 2009 -0700
 @@ -196,6 +196,7 @@
  LIBDL = @LIBDL@
  LIBEDIT_LOBJECTS = @LIBEDIT_LOBJECTS@
@@ -920,9 +929,9 @@ diff -r 1ac0113deff5 ndb/src/kernel/blocks/dbutil/Makefile.in
  LIBS = @LIBS@
  LIBTOOL = @LIBTOOL@
  LIB_EXTRA_CCFLAGS = @LIB_EXTRA_CCFLAGS@
-diff -r 1ac0113deff5 ndb/src/kernel/blocks/ndbcntr/Makefile.in
---- a/ndb/src/kernel/blocks/ndbcntr/Makefile.in        Mon Jun 01 00:35:44 2009 -0700
-+++ b/ndb/src/kernel/blocks/ndbcntr/Makefile.in        Mon Jun 01 00:36:01 2009 -0700
+diff -r 592f6c3641ba ndb/src/kernel/blocks/ndbcntr/Makefile.in
+--- a/ndb/src/kernel/blocks/ndbcntr/Makefile.in        Wed Jul 29 13:33:34 2009 -0700
++++ b/ndb/src/kernel/blocks/ndbcntr/Makefile.in        Wed Jul 29 13:34:11 2009 -0700
 @@ -197,6 +197,7 @@
  LIBDL = @LIBDL@
  LIBEDIT_LOBJECTS = @LIBEDIT_LOBJECTS@
@@ -931,9 +940,9 @@ diff -r 1ac0113deff5 ndb/src/kernel/blocks/ndbcntr/Makefile.in
  LIBS = @LIBS@
  LIBTOOL = @LIBTOOL@
  LIB_EXTRA_CCFLAGS = @LIB_EXTRA_CCFLAGS@
-diff -r 1ac0113deff5 ndb/src/kernel/blocks/ndbfs/Makefile.in
---- a/ndb/src/kernel/blocks/ndbfs/Makefile.in  Mon Jun 01 00:35:44 2009 -0700
-+++ b/ndb/src/kernel/blocks/ndbfs/Makefile.in  Mon Jun 01 00:36:01 2009 -0700
+diff -r 592f6c3641ba ndb/src/kernel/blocks/ndbfs/Makefile.in
+--- a/ndb/src/kernel/blocks/ndbfs/Makefile.in  Wed Jul 29 13:33:34 2009 -0700
++++ b/ndb/src/kernel/blocks/ndbfs/Makefile.in  Wed Jul 29 13:34:11 2009 -0700
 @@ -197,6 +197,7 @@
  LIBDL = @LIBDL@
  LIBEDIT_LOBJECTS = @LIBEDIT_LOBJECTS@
@@ -942,9 +951,9 @@ diff -r 1ac0113deff5 ndb/src/kernel/blocks/ndbfs/Makefile.in
  LIBS = @LIBS@
  LIBTOOL = @LIBTOOL@
  LIB_EXTRA_CCFLAGS = @LIB_EXTRA_CCFLAGS@
-diff -r 1ac0113deff5 ndb/src/kernel/blocks/qmgr/Makefile.in
---- a/ndb/src/kernel/blocks/qmgr/Makefile.in   Mon Jun 01 00:35:44 2009 -0700
-+++ b/ndb/src/kernel/blocks/qmgr/Makefile.in   Mon Jun 01 00:36:01 2009 -0700
+diff -r 592f6c3641ba ndb/src/kernel/blocks/qmgr/Makefile.in
+--- a/ndb/src/kernel/blocks/qmgr/Makefile.in   Wed Jul 29 13:33:34 2009 -0700
++++ b/ndb/src/kernel/blocks/qmgr/Makefile.in   Wed Jul 29 13:34:11 2009 -0700
 @@ -196,6 +196,7 @@
  LIBDL = @LIBDL@
  LIBEDIT_LOBJECTS = @LIBEDIT_LOBJECTS@
@@ -953,9 +962,9 @@ diff -r 1ac0113deff5 ndb/src/kernel/blocks/qmgr/Makefile.in
  LIBS = @LIBS@
  LIBTOOL = @LIBTOOL@
  LIB_EXTRA_CCFLAGS = @LIB_EXTRA_CCFLAGS@
-diff -r 1ac0113deff5 ndb/src/kernel/blocks/suma/Makefile.in
---- a/ndb/src/kernel/blocks/suma/Makefile.in   Mon Jun 01 00:35:44 2009 -0700
-+++ b/ndb/src/kernel/blocks/suma/Makefile.in   Mon Jun 01 00:36:01 2009 -0700
+diff -r 592f6c3641ba ndb/src/kernel/blocks/suma/Makefile.in
+--- a/ndb/src/kernel/blocks/suma/Makefile.in   Wed Jul 29 13:33:34 2009 -0700
++++ b/ndb/src/kernel/blocks/suma/Makefile.in   Wed Jul 29 13:34:11 2009 -0700
 @@ -196,6 +196,7 @@
  LIBDL = @LIBDL@
  LIBEDIT_LOBJECTS = @LIBEDIT_LOBJECTS@
@@ -964,9 +973,9 @@ diff -r 1ac0113deff5 ndb/src/kernel/blocks/suma/Makefile.in
  LIBS = @LIBS@
  LIBTOOL = @LIBTOOL@
  LIB_EXTRA_CCFLAGS = @LIB_EXTRA_CCFLAGS@
-diff -r 1ac0113deff5 ndb/src/kernel/blocks/trix/Makefile.in
---- a/ndb/src/kernel/blocks/trix/Makefile.in   Mon Jun 01 00:35:44 2009 -0700
-+++ b/ndb/src/kernel/blocks/trix/Makefile.in   Mon Jun 01 00:36:01 2009 -0700
+diff -r 592f6c3641ba ndb/src/kernel/blocks/trix/Makefile.in
+--- a/ndb/src/kernel/blocks/trix/Makefile.in   Wed Jul 29 13:33:34 2009 -0700
++++ b/ndb/src/kernel/blocks/trix/Makefile.in   Wed Jul 29 13:34:11 2009 -0700
 @@ -196,6 +196,7 @@
  LIBDL = @LIBDL@
  LIBEDIT_LOBJECTS = @LIBEDIT_LOBJECTS@
@@ -975,9 +984,9 @@ diff -r 1ac0113deff5 ndb/src/kernel/blocks/trix/Makefile.in
  LIBS = @LIBS@
  LIBTOOL = @LIBTOOL@
  LIB_EXTRA_CCFLAGS = @LIB_EXTRA_CCFLAGS@
-diff -r 1ac0113deff5 ndb/src/kernel/error/Makefile.in
---- a/ndb/src/kernel/error/Makefile.in Mon Jun 01 00:35:44 2009 -0700
-+++ b/ndb/src/kernel/error/Makefile.in Mon Jun 01 00:36:01 2009 -0700
+diff -r 592f6c3641ba ndb/src/kernel/error/Makefile.in
+--- a/ndb/src/kernel/error/Makefile.in Wed Jul 29 13:33:34 2009 -0700
++++ b/ndb/src/kernel/error/Makefile.in Wed Jul 29 13:34:11 2009 -0700
 @@ -206,6 +206,7 @@
  LIBDL = @LIBDL@
  LIBEDIT_LOBJECTS = @LIBEDIT_LOBJECTS@
@@ -986,9 +995,9 @@ diff -r 1ac0113deff5 ndb/src/kernel/error/Makefile.in
  LIBS = @LIBS@
  LIBTOOL = @LIBTOOL@
  LIB_EXTRA_CCFLAGS = @LIB_EXTRA_CCFLAGS@
-diff -r 1ac0113deff5 ndb/src/kernel/vm/Makefile.in
---- a/ndb/src/kernel/vm/Makefile.in    Mon Jun 01 00:35:44 2009 -0700
-+++ b/ndb/src/kernel/vm/Makefile.in    Mon Jun 01 00:36:01 2009 -0700
+diff -r 592f6c3641ba ndb/src/kernel/vm/Makefile.in
+--- a/ndb/src/kernel/vm/Makefile.in    Wed Jul 29 13:33:34 2009 -0700
++++ b/ndb/src/kernel/vm/Makefile.in    Wed Jul 29 13:34:11 2009 -0700
 @@ -207,6 +207,7 @@
  LIBDL = @LIBDL@
  LIBEDIT_LOBJECTS = @LIBEDIT_LOBJECTS@
@@ -997,9 +1006,9 @@ diff -r 1ac0113deff5 ndb/src/kernel/vm/Makefile.in
  LIBS = @LIBS@
  LIBTOOL = @LIBTOOL@
  LIB_EXTRA_CCFLAGS = @LIB_EXTRA_CCFLAGS@
-diff -r 1ac0113deff5 ndb/src/mgmapi/Makefile.in
---- a/ndb/src/mgmapi/Makefile.in       Mon Jun 01 00:35:44 2009 -0700
-+++ b/ndb/src/mgmapi/Makefile.in       Mon Jun 01 00:36:01 2009 -0700
+diff -r 592f6c3641ba ndb/src/mgmapi/Makefile.in
+--- a/ndb/src/mgmapi/Makefile.in       Wed Jul 29 13:33:34 2009 -0700
++++ b/ndb/src/mgmapi/Makefile.in       Wed Jul 29 13:34:11 2009 -0700
 @@ -205,6 +205,7 @@
  LIBDL = @LIBDL@
  LIBEDIT_LOBJECTS = @LIBEDIT_LOBJECTS@
@@ -1008,9 +1017,9 @@ diff -r 1ac0113deff5 ndb/src/mgmapi/Makefile.in
  LIBS = @LIBS@
  LIBTOOL = @LIBTOOL@
  LIB_EXTRA_CCFLAGS = @LIB_EXTRA_CCFLAGS@
-diff -r 1ac0113deff5 ndb/src/mgmclient/Makefile.in
---- a/ndb/src/mgmclient/Makefile.in    Mon Jun 01 00:35:44 2009 -0700
-+++ b/ndb/src/mgmclient/Makefile.in    Mon Jun 01 00:36:01 2009 -0700
+diff -r 592f6c3641ba ndb/src/mgmclient/Makefile.in
+--- a/ndb/src/mgmclient/Makefile.in    Wed Jul 29 13:33:34 2009 -0700
++++ b/ndb/src/mgmclient/Makefile.in    Wed Jul 29 13:34:11 2009 -0700
 @@ -216,6 +216,7 @@
  LIBDL = @LIBDL@
  LIBEDIT_LOBJECTS = @LIBEDIT_LOBJECTS@
@@ -1019,9 +1028,9 @@ diff -r 1ac0113deff5 ndb/src/mgmclient/Makefile.in
  LIBS = @LIBS@
  LIBTOOL = @LIBTOOL@
  LIB_EXTRA_CCFLAGS = @LIB_EXTRA_CCFLAGS@
-diff -r 1ac0113deff5 ndb/src/mgmsrv/Makefile.in
---- a/ndb/src/mgmsrv/Makefile.in       Mon Jun 01 00:35:44 2009 -0700
-+++ b/ndb/src/mgmsrv/Makefile.in       Mon Jun 01 00:36:01 2009 -0700
+diff -r 592f6c3641ba ndb/src/mgmsrv/Makefile.in
+--- a/ndb/src/mgmsrv/Makefile.in       Wed Jul 29 13:33:34 2009 -0700
++++ b/ndb/src/mgmsrv/Makefile.in       Wed Jul 29 13:34:11 2009 -0700
 @@ -213,6 +213,7 @@
  LIBDL = @LIBDL@
  LIBEDIT_LOBJECTS = @LIBEDIT_LOBJECTS@
@@ -1030,9 +1039,9 @@ diff -r 1ac0113deff5 ndb/src/mgmsrv/Makefile.in
  LIBS = @LIBS@
  LIBTOOL = @LIBTOOL@
  LIB_EXTRA_CCFLAGS = @LIB_EXTRA_CCFLAGS@
-diff -r 1ac0113deff5 ndb/src/ndbapi/Makefile.in
---- a/ndb/src/ndbapi/Makefile.in       Mon Jun 01 00:35:44 2009 -0700
-+++ b/ndb/src/ndbapi/Makefile.in       Mon Jun 01 00:36:01 2009 -0700
+diff -r 592f6c3641ba ndb/src/ndbapi/Makefile.in
+--- a/ndb/src/ndbapi/Makefile.in       Wed Jul 29 13:33:34 2009 -0700
++++ b/ndb/src/ndbapi/Makefile.in       Wed Jul 29 13:34:11 2009 -0700
 @@ -215,6 +215,7 @@
  LIBDL = @LIBDL@
  LIBEDIT_LOBJECTS = @LIBEDIT_LOBJECTS@
@@ -1041,9 +1050,9 @@ diff -r 1ac0113deff5 ndb/src/ndbapi/Makefile.in
  LIBS = @LIBS@
  LIBTOOL = @LIBTOOL@
  LIB_EXTRA_CCFLAGS = @LIB_EXTRA_CCFLAGS@
-diff -r 1ac0113deff5 ndb/test/Makefile.in
---- a/ndb/test/Makefile.in     Mon Jun 01 00:35:44 2009 -0700
-+++ b/ndb/test/Makefile.in     Mon Jun 01 00:36:01 2009 -0700
+diff -r 592f6c3641ba ndb/test/Makefile.in
+--- a/ndb/test/Makefile.in     Wed Jul 29 13:33:34 2009 -0700
++++ b/ndb/test/Makefile.in     Wed Jul 29 13:34:11 2009 -0700
 @@ -156,6 +156,7 @@
  LIBDL = @LIBDL@
  LIBEDIT_LOBJECTS = @LIBEDIT_LOBJECTS@
@@ -1052,9 +1061,9 @@ diff -r 1ac0113deff5 ndb/test/Makefile.in
  LIBS = @LIBS@
  LIBTOOL = @LIBTOOL@
  LIB_EXTRA_CCFLAGS = @LIB_EXTRA_CCFLAGS@
-diff -r 1ac0113deff5 ndb/test/ndbapi/Makefile.in
---- a/ndb/test/ndbapi/Makefile.in      Mon Jun 01 00:35:44 2009 -0700
-+++ b/ndb/test/ndbapi/Makefile.in      Mon Jun 01 00:36:01 2009 -0700
+diff -r 592f6c3641ba ndb/test/ndbapi/Makefile.in
+--- a/ndb/test/ndbapi/Makefile.in      Wed Jul 29 13:33:34 2009 -0700
++++ b/ndb/test/ndbapi/Makefile.in      Wed Jul 29 13:34:11 2009 -0700
 @@ -595,6 +595,7 @@
  LIBDL = @LIBDL@
  LIBEDIT_LOBJECTS = @LIBEDIT_LOBJECTS@
@@ -1063,9 +1072,9 @@ diff -r 1ac0113deff5 ndb/test/ndbapi/Makefile.in
  LIBS = @LIBS@
  LIBTOOL = @LIBTOOL@
  LIB_EXTRA_CCFLAGS = @LIB_EXTRA_CCFLAGS@
-diff -r 1ac0113deff5 ndb/test/ndbapi/bank/Makefile.in
---- a/ndb/test/ndbapi/bank/Makefile.in Mon Jun 01 00:35:44 2009 -0700
-+++ b/ndb/test/ndbapi/bank/Makefile.in Mon Jun 01 00:36:01 2009 -0700
+diff -r 592f6c3641ba ndb/test/ndbapi/bank/Makefile.in
+--- a/ndb/test/ndbapi/bank/Makefile.in Wed Jul 29 13:33:34 2009 -0700
++++ b/ndb/test/ndbapi/bank/Makefile.in Wed Jul 29 13:34:11 2009 -0700
 @@ -282,6 +282,7 @@
  LIBDL = @LIBDL@
  LIBEDIT_LOBJECTS = @LIBEDIT_LOBJECTS@
@@ -1074,9 +1083,9 @@ diff -r 1ac0113deff5 ndb/test/ndbapi/bank/Makefile.in
  LIBS = @LIBS@
  LIBTOOL = @LIBTOOL@
  LIB_EXTRA_CCFLAGS = @LIB_EXTRA_CCFLAGS@
-diff -r 1ac0113deff5 ndb/test/run-test/Makefile.in
---- a/ndb/test/run-test/Makefile.in    Mon Jun 01 00:35:44 2009 -0700
-+++ b/ndb/test/run-test/Makefile.in    Mon Jun 01 00:36:01 2009 -0700
+diff -r 592f6c3641ba ndb/test/run-test/Makefile.in
+--- a/ndb/test/run-test/Makefile.in    Wed Jul 29 13:33:34 2009 -0700
++++ b/ndb/test/run-test/Makefile.in    Wed Jul 29 13:34:11 2009 -0700
 @@ -243,6 +243,7 @@
  LIBDL = @LIBDL@
  LIBEDIT_LOBJECTS = @LIBEDIT_LOBJECTS@
@@ -1085,9 +1094,9 @@ diff -r 1ac0113deff5 ndb/test/run-test/Makefile.in
  LIBS = @LIBS@
  LIBTOOL = @LIBTOOL@
  LIB_EXTRA_CCFLAGS = @LIB_EXTRA_CCFLAGS@
-diff -r 1ac0113deff5 ndb/test/src/Makefile.in
---- a/ndb/test/src/Makefile.in Mon Jun 01 00:35:44 2009 -0700
-+++ b/ndb/test/src/Makefile.in Mon Jun 01 00:36:01 2009 -0700
+diff -r 592f6c3641ba ndb/test/src/Makefile.in
+--- a/ndb/test/src/Makefile.in Wed Jul 29 13:33:34 2009 -0700
++++ b/ndb/test/src/Makefile.in Wed Jul 29 13:34:11 2009 -0700
 @@ -213,6 +213,7 @@
  LIBDL = @LIBDL@
  LIBEDIT_LOBJECTS = @LIBEDIT_LOBJECTS@
@@ -1096,9 +1105,9 @@ diff -r 1ac0113deff5 ndb/test/src/Makefile.in
  LIBS = @LIBS@
  LIBTOOL = @LIBTOOL@
  LIB_EXTRA_CCFLAGS = @LIB_EXTRA_CCFLAGS@
-diff -r 1ac0113deff5 ndb/test/tools/Makefile.in
---- a/ndb/test/tools/Makefile.in       Mon Jun 01 00:35:44 2009 -0700
-+++ b/ndb/test/tools/Makefile.in       Mon Jun 01 00:36:01 2009 -0700
+diff -r 592f6c3641ba ndb/test/tools/Makefile.in
+--- a/ndb/test/tools/Makefile.in       Wed Jul 29 13:33:34 2009 -0700
++++ b/ndb/test/tools/Makefile.in       Wed Jul 29 13:34:11 2009 -0700
 @@ -325,6 +325,7 @@
  LIBDL = @LIBDL@
  LIBEDIT_LOBJECTS = @LIBEDIT_LOBJECTS@
@@ -1107,9 +1116,9 @@ diff -r 1ac0113deff5 ndb/test/tools/Makefile.in
  LIBS = @LIBS@
  LIBTOOL = @LIBTOOL@
  LIB_EXTRA_CCFLAGS = @LIB_EXTRA_CCFLAGS@
-diff -r 1ac0113deff5 ndb/tools/Makefile.in
---- a/ndb/tools/Makefile.in    Mon Jun 01 00:35:44 2009 -0700
-+++ b/ndb/tools/Makefile.in    Mon Jun 01 00:36:01 2009 -0700
+diff -r 592f6c3641ba ndb/tools/Makefile.in
+--- a/ndb/tools/Makefile.in    Wed Jul 29 13:33:34 2009 -0700
++++ b/ndb/tools/Makefile.in    Wed Jul 29 13:34:11 2009 -0700
 @@ -344,6 +344,7 @@
  LIBDL = @LIBDL@
  LIBEDIT_LOBJECTS = @LIBEDIT_LOBJECTS@
@@ -1118,9 +1127,9 @@ diff -r 1ac0113deff5 ndb/tools/Makefile.in
  LIBS = @LIBS@
  LIBTOOL = @LIBTOOL@
  LIB_EXTRA_CCFLAGS = @LIB_EXTRA_CCFLAGS@
-diff -r 1ac0113deff5 netware/Makefile.in
---- a/netware/Makefile.in      Mon Jun 01 00:35:44 2009 -0700
-+++ b/netware/Makefile.in      Mon Jun 01 00:36:01 2009 -0700
+diff -r 592f6c3641ba netware/Makefile.in
+--- a/netware/Makefile.in      Wed Jul 29 13:33:34 2009 -0700
++++ b/netware/Makefile.in      Wed Jul 29 13:34:11 2009 -0700
 @@ -199,6 +199,7 @@
  LIBDL = @LIBDL@
  LIBEDIT_LOBJECTS = @LIBEDIT_LOBJECTS@
@@ -1129,9 +1138,9 @@ diff -r 1ac0113deff5 netware/Makefile.in
  LIBS = @LIBS@
  LIBTOOL = @LIBTOOL@
  LIB_EXTRA_CCFLAGS = @LIB_EXTRA_CCFLAGS@
-diff -r 1ac0113deff5 os2/Makefile.in
---- a/os2/Makefile.in  Mon Jun 01 00:35:44 2009 -0700
-+++ b/os2/Makefile.in  Mon Jun 01 00:36:01 2009 -0700
+diff -r 592f6c3641ba os2/Makefile.in
+--- a/os2/Makefile.in  Wed Jul 29 13:33:34 2009 -0700
++++ b/os2/Makefile.in  Wed Jul 29 13:34:11 2009 -0700
 @@ -156,6 +156,7 @@
  LIBDL = @LIBDL@
  LIBEDIT_LOBJECTS = @LIBEDIT_LOBJECTS@
@@ -1140,9 +1149,9 @@ diff -r 1ac0113deff5 os2/Makefile.in
  LIBS = @LIBS@
  LIBTOOL = @LIBTOOL@
  LIB_EXTRA_CCFLAGS = @LIB_EXTRA_CCFLAGS@
-diff -r 1ac0113deff5 os2/include/Makefile.in
---- a/os2/include/Makefile.in  Mon Jun 01 00:35:44 2009 -0700
-+++ b/os2/include/Makefile.in  Mon Jun 01 00:36:01 2009 -0700
+diff -r 592f6c3641ba os2/include/Makefile.in
+--- a/os2/include/Makefile.in  Wed Jul 29 13:33:34 2009 -0700
++++ b/os2/include/Makefile.in  Wed Jul 29 13:34:11 2009 -0700
 @@ -156,6 +156,7 @@
  LIBDL = @LIBDL@
  LIBEDIT_LOBJECTS = @LIBEDIT_LOBJECTS@
@@ -1151,9 +1160,9 @@ diff -r 1ac0113deff5 os2/include/Makefile.in
  LIBS = @LIBS@
  LIBTOOL = @LIBTOOL@
  LIB_EXTRA_CCFLAGS = @LIB_EXTRA_CCFLAGS@
-diff -r 1ac0113deff5 os2/include/sys/Makefile.in
---- a/os2/include/sys/Makefile.in      Mon Jun 01 00:35:44 2009 -0700
-+++ b/os2/include/sys/Makefile.in      Mon Jun 01 00:36:01 2009 -0700
+diff -r 592f6c3641ba os2/include/sys/Makefile.in
+--- a/os2/include/sys/Makefile.in      Wed Jul 29 13:33:34 2009 -0700
++++ b/os2/include/sys/Makefile.in      Wed Jul 29 13:34:11 2009 -0700
 @@ -144,6 +144,7 @@
  LIBDL = @LIBDL@
  LIBEDIT_LOBJECTS = @LIBEDIT_LOBJECTS@
@@ -1162,9 +1171,9 @@ diff -r 1ac0113deff5 os2/include/sys/Makefile.in
  LIBS = @LIBS@
  LIBTOOL = @LIBTOOL@
  LIB_EXTRA_CCFLAGS = @LIB_EXTRA_CCFLAGS@
-diff -r 1ac0113deff5 patch_info/userstats.info
+diff -r 592f6c3641ba patch_info/userstats.info
 --- /dev/null  Thu Jan 01 00:00:00 1970 +0000
-+++ b/patch_info/userstats.info        Mon Jun 01 00:36:01 2009 -0700
++++ b/patch_info/userstats.info        Wed Jul 29 13:34:11 2009 -0700
 @@ -0,0 +1,14 @@
 +File=userstatsv2.patch
 +Name=SHOW USER/TABLE/INDEX statistics
@@ -1180,9 +1189,9 @@ diff -r 1ac0113deff5 patch_info/userstats.info
 +
 +2008-12-09
 +YK: fixed "Row_sent: 0" problem at microslow_innodb.patch
-diff -r 1ac0113deff5 pstack/Makefile.in
---- a/pstack/Makefile.in       Mon Jun 01 00:35:44 2009 -0700
-+++ b/pstack/Makefile.in       Mon Jun 01 00:36:01 2009 -0700
+diff -r 592f6c3641ba pstack/Makefile.in
+--- a/pstack/Makefile.in       Wed Jul 29 13:33:34 2009 -0700
++++ b/pstack/Makefile.in       Wed Jul 29 13:34:11 2009 -0700
 @@ -196,6 +196,7 @@
  LIBDL = @LIBDL@
  LIBEDIT_LOBJECTS = @LIBEDIT_LOBJECTS@
@@ -1191,9 +1200,9 @@ diff -r 1ac0113deff5 pstack/Makefile.in
  LIBS = @LIBS@
  LIBTOOL = @LIBTOOL@
  LIB_EXTRA_CCFLAGS = @LIB_EXTRA_CCFLAGS@
-diff -r 1ac0113deff5 pstack/aout/Makefile.in
---- a/pstack/aout/Makefile.in  Mon Jun 01 00:35:44 2009 -0700
-+++ b/pstack/aout/Makefile.in  Mon Jun 01 00:36:01 2009 -0700
+diff -r 592f6c3641ba pstack/aout/Makefile.in
+--- a/pstack/aout/Makefile.in  Wed Jul 29 13:33:34 2009 -0700
++++ b/pstack/aout/Makefile.in  Wed Jul 29 13:34:11 2009 -0700
 @@ -134,6 +134,7 @@
  LIBDL = @LIBDL@
  LIBEDIT_LOBJECTS = @LIBEDIT_LOBJECTS@
@@ -1202,9 +1211,9 @@ diff -r 1ac0113deff5 pstack/aout/Makefile.in
  LIBS = @LIBS@
  LIBTOOL = @LIBTOOL@
  LIB_EXTRA_CCFLAGS = @LIB_EXTRA_CCFLAGS@
-diff -r 1ac0113deff5 regex/Makefile.in
---- a/regex/Makefile.in        Mon Jun 01 00:35:44 2009 -0700
-+++ b/regex/Makefile.in        Mon Jun 01 00:36:01 2009 -0700
+diff -r 592f6c3641ba regex/Makefile.in
+--- a/regex/Makefile.in        Wed Jul 29 13:33:34 2009 -0700
++++ b/regex/Makefile.in        Wed Jul 29 13:34:11 2009 -0700
 @@ -180,6 +180,7 @@
  LIBDL = @LIBDL@
  LIBEDIT_LOBJECTS = @LIBEDIT_LOBJECTS@
@@ -1213,9 +1222,9 @@ diff -r 1ac0113deff5 regex/Makefile.in
  LIBS = @LIBS@
  LIBTOOL = @LIBTOOL@
  LIB_EXTRA_CCFLAGS = @LIB_EXTRA_CCFLAGS@
-diff -r 1ac0113deff5 scripts/Makefile.in
---- a/scripts/Makefile.in      Mon Jun 01 00:35:44 2009 -0700
-+++ b/scripts/Makefile.in      Mon Jun 01 00:36:01 2009 -0700
+diff -r 592f6c3641ba scripts/Makefile.in
+--- a/scripts/Makefile.in      Wed Jul 29 13:33:34 2009 -0700
++++ b/scripts/Makefile.in      Wed Jul 29 13:34:11 2009 -0700
 @@ -176,6 +176,7 @@
  LIBDL = @LIBDL@
  LIBEDIT_LOBJECTS = @LIBEDIT_LOBJECTS@
@@ -1224,9 +1233,9 @@ diff -r 1ac0113deff5 scripts/Makefile.in
  LIBS = @LIBS@
  LIBTOOL = @LIBTOOL@
  LIB_EXTRA_CCFLAGS = @LIB_EXTRA_CCFLAGS@
-diff -r 1ac0113deff5 server-tools/Makefile.in
---- a/server-tools/Makefile.in Mon Jun 01 00:35:44 2009 -0700
-+++ b/server-tools/Makefile.in Mon Jun 01 00:36:01 2009 -0700
+diff -r 592f6c3641ba server-tools/Makefile.in
+--- a/server-tools/Makefile.in Wed Jul 29 13:33:34 2009 -0700
++++ b/server-tools/Makefile.in Wed Jul 29 13:34:11 2009 -0700
 @@ -155,6 +155,7 @@
  LIBDL = @LIBDL@
  LIBEDIT_LOBJECTS = @LIBEDIT_LOBJECTS@
@@ -1235,9 +1244,9 @@ diff -r 1ac0113deff5 server-tools/Makefile.in
  LIBS = @LIBS@
  LIBTOOL = @LIBTOOL@
  LIB_EXTRA_CCFLAGS = @LIB_EXTRA_CCFLAGS@
-diff -r 1ac0113deff5 server-tools/instance-manager/Makefile.in
---- a/server-tools/instance-manager/Makefile.in        Mon Jun 01 00:35:44 2009 -0700
-+++ b/server-tools/instance-manager/Makefile.in        Mon Jun 01 00:36:01 2009 -0700
+diff -r 592f6c3641ba server-tools/instance-manager/Makefile.in
+--- a/server-tools/instance-manager/Makefile.in        Wed Jul 29 13:33:34 2009 -0700
++++ b/server-tools/instance-manager/Makefile.in        Wed Jul 29 13:34:11 2009 -0700
 @@ -205,6 +205,7 @@
  LIBDL = @LIBDL@
  LIBEDIT_LOBJECTS = @LIBEDIT_LOBJECTS@
@@ -1246,9 +1255,9 @@ diff -r 1ac0113deff5 server-tools/instance-manager/Makefile.in
  LIBS = @LIBS@
  LIBTOOL = @LIBTOOL@
  LIB_EXTRA_CCFLAGS = @LIB_EXTRA_CCFLAGS@
-diff -r 1ac0113deff5 sql/Makefile.in
---- a/sql/Makefile.in  Mon Jun 01 00:35:44 2009 -0700
-+++ b/sql/Makefile.in  Mon Jun 01 00:36:01 2009 -0700
+diff -r 592f6c3641ba sql/Makefile.in
+--- a/sql/Makefile.in  Wed Jul 29 13:33:34 2009 -0700
++++ b/sql/Makefile.in  Wed Jul 29 13:34:11 2009 -0700
 @@ -274,6 +274,7 @@
  LIBDL = @LIBDL@
  LIBEDIT_LOBJECTS = @LIBEDIT_LOBJECTS@
@@ -1257,10 +1266,10 @@ diff -r 1ac0113deff5 sql/Makefile.in
  LIBS = @LIBS@
  LIBTOOL = @LIBTOOL@
  LIB_EXTRA_CCFLAGS = @LIB_EXTRA_CCFLAGS@
-diff -r 1ac0113deff5 sql/ha_innodb.cc
---- a/sql/ha_innodb.cc Mon Jun 01 00:35:44 2009 -0700
-+++ b/sql/ha_innodb.cc Mon Jun 01 00:36:01 2009 -0700
-@@ -3338,6 +3338,8 @@
+diff -r 592f6c3641ba sql/ha_innodb.cc
+--- a/sql/ha_innodb.cc Wed Jul 29 13:33:34 2009 -0700
++++ b/sql/ha_innodb.cc Wed Jul 29 13:34:11 2009 -0700
+@@ -3341,6 +3341,8 @@
  
        error = row_insert_for_mysql((byte*) record, prebuilt);
  
@@ -1269,7 +1278,7 @@ diff -r 1ac0113deff5 sql/ha_innodb.cc
        if (error == DB_SUCCESS && auto_inc_used) {
  
                /* Fetch the value that was set in the autoincrement field */
-@@ -3610,6 +3612,8 @@
+@@ -3613,6 +3615,8 @@
                }
        }
  
@@ -1278,7 +1287,7 @@ diff -r 1ac0113deff5 sql/ha_innodb.cc
        innodb_srv_conc_exit_innodb(prebuilt->trx);
  
        error = convert_error_code_to_mysql(error, user_thd);
-@@ -3658,6 +3662,8 @@
+@@ -3661,6 +3665,8 @@
  
        error = row_update_for_mysql((byte*) record, prebuilt);
  
@@ -1287,7 +1296,7 @@ diff -r 1ac0113deff5 sql/ha_innodb.cc
        innodb_srv_conc_exit_innodb(prebuilt->trx);
  
        error = convert_error_code_to_mysql(error, user_thd);
-@@ -4089,6 +4095,9 @@
+@@ -4092,6 +4098,9 @@
        if (ret == DB_SUCCESS) {
                error = 0;
                table->status = 0;
@@ -1297,9 +1306,9 @@ diff -r 1ac0113deff5 sql/ha_innodb.cc
  
        } else if (ret == DB_RECORD_NOT_FOUND) {
                error = HA_ERR_END_OF_FILE;
-diff -r 1ac0113deff5 sql/ha_myisam.cc
---- a/sql/ha_myisam.cc Mon Jun 01 00:35:44 2009 -0700
-+++ b/sql/ha_myisam.cc Mon Jun 01 00:36:01 2009 -0700
+diff -r 592f6c3641ba sql/ha_myisam.cc
+--- a/sql/ha_myisam.cc Wed Jul 29 13:33:34 2009 -0700
++++ b/sql/ha_myisam.cc Wed Jul 29 13:34:11 2009 -0700
 @@ -670,7 +670,9 @@
      if ((error= update_auto_increment()))
        return error;
@@ -1311,7 +1320,7 @@ diff -r 1ac0113deff5 sql/ha_myisam.cc
  }
  
  int ha_myisam::check(THD* thd, HA_CHECK_OPT* check_opt)
-@@ -1518,13 +1520,17 @@
+@@ -1521,13 +1523,17 @@
    statistic_increment(table->in_use->status_var.ha_update_count,&LOCK_status);
    if (table->timestamp_field_type & TIMESTAMP_AUTO_SET_ON_UPDATE)
      table->timestamp_field->set_time();
@@ -1331,7 +1340,7 @@ diff -r 1ac0113deff5 sql/ha_myisam.cc
  }
  
  int ha_myisam::index_read(byte * buf, const byte * key,
-@@ -1535,6 +1541,13 @@
+@@ -1538,6 +1544,13 @@
                      &LOCK_status);
    int error=mi_rkey(file,buf,active_index, key, key_len, find_flag);
    table->status=error ? STATUS_NOT_FOUND: 0;
@@ -1345,7 +1354,7 @@ diff -r 1ac0113deff5 sql/ha_myisam.cc
    return error;
  }
  
-@@ -1545,6 +1558,13 @@
+@@ -1548,6 +1561,13 @@
                      &LOCK_status);
    int error=mi_rkey(file,buf,index, key, key_len, find_flag);
    table->status=error ? STATUS_NOT_FOUND: 0;
@@ -1359,7 +1368,7 @@ diff -r 1ac0113deff5 sql/ha_myisam.cc
    return error;
  }
  
-@@ -1555,6 +1575,13 @@
+@@ -1558,6 +1578,13 @@
                      &LOCK_status);
    int error=mi_rkey(file,buf,active_index, key, key_len, HA_READ_PREFIX_LAST);
    table->status=error ? STATUS_NOT_FOUND: 0;
@@ -1373,7 +1382,7 @@ diff -r 1ac0113deff5 sql/ha_myisam.cc
    return error;
  }
  
-@@ -1565,6 +1592,13 @@
+@@ -1568,6 +1595,13 @@
                      &LOCK_status);
    int error=mi_rnext(file,buf,active_index);
    table->status=error ? STATUS_NOT_FOUND: 0;
@@ -1387,7 +1396,7 @@ diff -r 1ac0113deff5 sql/ha_myisam.cc
    return error;
  }
  
-@@ -1575,6 +1609,13 @@
+@@ -1578,6 +1612,13 @@
                      &LOCK_status);
    int error=mi_rprev(file,buf, active_index);
    table->status=error ? STATUS_NOT_FOUND: 0;
@@ -1401,7 +1410,7 @@ diff -r 1ac0113deff5 sql/ha_myisam.cc
    return error;
  }
  
-@@ -1585,6 +1626,13 @@
+@@ -1588,6 +1629,13 @@
                      &LOCK_status);
    int error=mi_rfirst(file, buf, active_index);
    table->status=error ? STATUS_NOT_FOUND: 0;
@@ -1415,7 +1424,7 @@ diff -r 1ac0113deff5 sql/ha_myisam.cc
    return error;
  }
  
-@@ -1595,6 +1643,13 @@
+@@ -1598,6 +1646,13 @@
                      &LOCK_status);
    int error=mi_rlast(file, buf, active_index);
    table->status=error ? STATUS_NOT_FOUND: 0;
@@ -1429,7 +1438,7 @@ diff -r 1ac0113deff5 sql/ha_myisam.cc
    return error;
  }
  
-@@ -1611,6 +1666,13 @@
+@@ -1614,6 +1669,13 @@
      error= mi_rnext_same(file,buf);
    } while (error == HA_ERR_RECORD_DELETED);
    table->status=error ? STATUS_NOT_FOUND: 0;
@@ -1443,7 +1452,7 @@ diff -r 1ac0113deff5 sql/ha_myisam.cc
    return error;
  }
  
-@@ -1628,6 +1690,7 @@
+@@ -1631,6 +1693,7 @@
                      &LOCK_status);
    int error=mi_scan(file, buf);
    table->status=error ? STATUS_NOT_FOUND: 0;
@@ -1451,7 +1460,7 @@ diff -r 1ac0113deff5 sql/ha_myisam.cc
    return error;
  }
  
-@@ -1642,6 +1705,7 @@
+@@ -1645,6 +1708,7 @@
                      &LOCK_status);
    int error=mi_rrnd(file, buf, my_get_ptr(pos,ref_length));
    table->status=error ? STATUS_NOT_FOUND: 0;
@@ -1459,9 +1468,9 @@ diff -r 1ac0113deff5 sql/ha_myisam.cc
    return error;
  }
  
-diff -r 1ac0113deff5 sql/handler.cc
---- a/sql/handler.cc   Mon Jun 01 00:35:44 2009 -0700
-+++ b/sql/handler.cc   Mon Jun 01 00:36:01 2009 -0700
+diff -r 592f6c3641ba sql/handler.cc
+--- a/sql/handler.cc   Wed Jul 29 13:33:34 2009 -0700
++++ b/sql/handler.cc   Wed Jul 29 13:34:11 2009 -0700
 @@ -726,6 +726,8 @@
      if (cookie)
        tc_log->unlog(cookie, xid);
@@ -1608,9 +1617,9 @@ diff -r 1ac0113deff5 sql/handler.cc
  
  /****************************************************************************
  ** Some general functions that isn't in the handler class
-diff -r 1ac0113deff5 sql/handler.h
---- a/sql/handler.h    Mon Jun 01 00:35:44 2009 -0700
-+++ b/sql/handler.h    Mon Jun 01 00:36:01 2009 -0700
+diff -r 592f6c3641ba sql/handler.h
+--- a/sql/handler.h    Wed Jul 29 13:33:34 2009 -0700
++++ b/sql/handler.h    Wed Jul 29 13:34:11 2009 -0700
 @@ -32,6 +32,10 @@
  #define USING_TRANSACTIONS
  #endif
@@ -1668,9 +1677,9 @@ diff -r 1ac0113deff5 sql/handler.h
    /*
      default rename_table() and delete_table() rename/delete files with a
      given name and extensions from bas_ext()
-diff -r 1ac0113deff5 sql/lex.h
---- a/sql/lex.h        Mon Jun 01 00:35:44 2009 -0700
-+++ b/sql/lex.h        Mon Jun 01 00:36:01 2009 -0700
+diff -r 592f6c3641ba sql/lex.h
+--- a/sql/lex.h        Wed Jul 29 13:33:34 2009 -0700
++++ b/sql/lex.h        Wed Jul 29 13:34:11 2009 -0700
 @@ -109,6 +109,7 @@
    { "CHECKSUM",               SYM(CHECKSUM_SYM)},
    { "CIPHER",         SYM(CIPHER_SYM)},
@@ -1711,9 +1720,9 @@ diff -r 1ac0113deff5 sql/lex.h
    { "USE_FRM",                SYM(USE_FRM)},
    { "USING",          SYM(USING)},
    { "UTC_DATE",         SYM(UTC_DATE_SYM)},
-diff -r 1ac0113deff5 sql/log.cc
---- a/sql/log.cc       Mon Jun 01 00:35:44 2009 -0700
-+++ b/sql/log.cc       Mon Jun 01 00:36:01 2009 -0700
+diff -r 592f6c3641ba sql/log.cc
+--- a/sql/log.cc       Wed Jul 29 13:33:34 2009 -0700
++++ b/sql/log.cc       Wed Jul 29 13:34:11 2009 -0700
 @@ -1958,18 +1958,24 @@
                           thd->current_insert_id);
        if (e.write(file))
@@ -1791,9 +1800,9 @@ diff -r 1ac0113deff5 sql/log.cc
  #ifndef DBUG_OFF
  DBUG_skip_commit:
  #endif
-diff -r 1ac0113deff5 sql/mysql_priv.h
---- a/sql/mysql_priv.h Mon Jun 01 00:35:44 2009 -0700
-+++ b/sql/mysql_priv.h Mon Jun 01 00:36:01 2009 -0700
+diff -r 592f6c3641ba sql/mysql_priv.h
+--- a/sql/mysql_priv.h Wed Jul 29 13:33:34 2009 -0700
++++ b/sql/mysql_priv.h Wed Jul 29 13:34:11 2009 -0700
 @@ -837,7 +837,15 @@
  bool multi_delete_set_locks_and_link_aux_tables(LEX *lex);
  void init_max_user_conn(void);
@@ -1841,9 +1850,9 @@ diff -r 1ac0113deff5 sql/mysql_priv.h
  
  extern const char *opt_date_time_formats[];
  extern KNOWN_DATE_TIME_FORMAT known_date_time_formats[];
-diff -r 1ac0113deff5 sql/mysqld.cc
---- a/sql/mysqld.cc    Mon Jun 01 00:35:44 2009 -0700
-+++ b/sql/mysqld.cc    Mon Jun 01 00:36:01 2009 -0700
+diff -r 592f6c3641ba sql/mysqld.cc
+--- a/sql/mysqld.cc    Wed Jul 29 13:33:34 2009 -0700
++++ b/sql/mysqld.cc    Wed Jul 29 13:34:11 2009 -0700
 @@ -417,6 +417,7 @@
  uint    opt_large_page_size= 0;
  my_bool opt_old_style_user_limits= 0, trust_function_creators= 0;
@@ -1951,9 +1960,9 @@ diff -r 1ac0113deff5 sql/mysqld.cc
    {0, 0, 0, 0, 0, 0, GET_NO_ARG, NO_ARG, 0, 0, 0, 0, 0, 0}
  };
  
-diff -r 1ac0113deff5 sql/set_var.cc
---- a/sql/set_var.cc   Mon Jun 01 00:35:44 2009 -0700
-+++ b/sql/set_var.cc   Mon Jun 01 00:36:01 2009 -0700
+diff -r 592f6c3641ba sql/set_var.cc
+--- a/sql/set_var.cc   Wed Jul 29 13:33:34 2009 -0700
++++ b/sql/set_var.cc   Wed Jul 29 13:34:11 2009 -0700
 @@ -325,6 +325,7 @@
  sys_var_thd_ulong     sys_read_buff_size("read_buffer_size",
                                           &SV::read_buff_size);
@@ -1978,9 +1987,9 @@ diff -r 1ac0113deff5 sql/set_var.cc
    {sys_use_global_long_query_time.name, (char*) &sys_use_global_long_query_time, SHOW_SYS},
    {sys_version.name,          (char*) &sys_version,                 SHOW_SYS},
  #ifdef HAVE_BERKELEY_DB
-diff -r 1ac0113deff5 sql/share/Makefile.in
---- a/sql/share/Makefile.in    Mon Jun 01 00:35:44 2009 -0700
-+++ b/sql/share/Makefile.in    Mon Jun 01 00:36:01 2009 -0700
+diff -r 592f6c3641ba sql/share/Makefile.in
+--- a/sql/share/Makefile.in    Wed Jul 29 13:33:34 2009 -0700
++++ b/sql/share/Makefile.in    Wed Jul 29 13:34:11 2009 -0700
 @@ -144,6 +144,7 @@
  LIBDL = @LIBDL@
  LIBEDIT_LOBJECTS = @LIBEDIT_LOBJECTS@
@@ -1989,9 +1998,9 @@ diff -r 1ac0113deff5 sql/share/Makefile.in
  LIBS = @LIBS@
  LIBTOOL = @LIBTOOL@
  LIB_EXTRA_CCFLAGS = @LIB_EXTRA_CCFLAGS@
-diff -r 1ac0113deff5 sql/sql_base.cc
---- a/sql/sql_base.cc  Mon Jun 01 00:35:44 2009 -0700
-+++ b/sql/sql_base.cc  Mon Jun 01 00:36:01 2009 -0700
+diff -r 592f6c3641ba sql/sql_base.cc
+--- a/sql/sql_base.cc  Wed Jul 29 13:33:34 2009 -0700
++++ b/sql/sql_base.cc  Wed Jul 29 13:34:11 2009 -0700
 @@ -624,6 +624,12 @@
    DBUG_ENTER("close_thread_table");
    DBUG_ASSERT(table->key_read == 0);
@@ -2015,9 +2024,9 @@ diff -r 1ac0113deff5 sql/sql_base.cc
    db_type table_type=table->s->db_type;
    strmov(path,table->s->path);
    free_io_cache(table);
-diff -r 1ac0113deff5 sql/sql_class.cc
---- a/sql/sql_class.cc Mon Jun 01 00:35:44 2009 -0700
-+++ b/sql/sql_class.cc Mon Jun 01 00:36:01 2009 -0700
+diff -r 592f6c3641ba sql/sql_class.cc
+--- a/sql/sql_class.cc Wed Jul 29 13:33:34 2009 -0700
++++ b/sql/sql_class.cc Wed Jul 29 13:34:11 2009 -0700
 @@ -239,6 +239,13 @@
    bzero(ha_data, sizeof(ha_data));
    mysys_var=0;
@@ -2187,9 +2196,9 @@ diff -r 1ac0113deff5 sql/sql_class.cc
  }
  
  
-diff -r 1ac0113deff5 sql/sql_class.h
---- a/sql/sql_class.h  Mon Jun 01 00:35:44 2009 -0700
-+++ b/sql/sql_class.h  Mon Jun 01 00:36:01 2009 -0700
+diff -r 592f6c3641ba sql/sql_class.h
+--- a/sql/sql_class.h  Wed Jul 29 13:33:34 2009 -0700
++++ b/sql/sql_class.h  Wed Jul 29 13:34:11 2009 -0700
 @@ -1302,6 +1302,8 @@
      first byte of the packet in do_command()
    */
@@ -2285,7 +2294,7 @@ diff -r 1ac0113deff5 sql/sql_class.h
  public:
    /**
      Add an internal error handler to the thread execution context.
-@@ -1935,6 +1993,11 @@
+@@ -1935,6 +1993,10 @@
    MEM_ROOT main_mem_root;
  };
  
@@ -2293,13 +2302,12 @@ diff -r 1ac0113deff5 sql/sql_class.h
 +// 'client'. Does not allocate memory. May return "".
 +const char *get_client_host(THD *client);
 +
-+#define LIST_PROCESS_HOST_LEN 64
  
  #define tmp_disable_binlog(A)       \
    {ulonglong tmp_disable_binlog__save_options= (A)->options; \
-diff -r 1ac0113deff5 sql/sql_delete.cc
---- a/sql/sql_delete.cc        Mon Jun 01 00:35:44 2009 -0700
-+++ b/sql/sql_delete.cc        Mon Jun 01 00:36:01 2009 -0700
+diff -r 592f6c3641ba sql/sql_delete.cc
+--- a/sql/sql_delete.cc        Wed Jul 29 13:33:34 2009 -0700
++++ b/sql/sql_delete.cc        Wed Jul 29 13:34:11 2009 -0700
 @@ -358,6 +358,7 @@
      send_ok(thd,deleted);
      DBUG_PRINT("info",("%ld records deleted",(long) deleted));
@@ -2308,7 +2316,7 @@ diff -r 1ac0113deff5 sql/sql_delete.cc
    DBUG_RETURN(error >= 0 || thd->net.report_error);
  }
  
-@@ -869,6 +870,7 @@
+@@ -887,6 +888,7 @@
      thd->row_count_func= deleted;
      ::send_ok(thd, deleted);
    }
@@ -2316,10 +2324,10 @@ diff -r 1ac0113deff5 sql/sql_delete.cc
    return 0;
  }
  
-diff -r 1ac0113deff5 sql/sql_insert.cc
---- a/sql/sql_insert.cc        Mon Jun 01 00:35:44 2009 -0700
-+++ b/sql/sql_insert.cc        Mon Jun 01 00:36:01 2009 -0700
-@@ -989,6 +989,7 @@
+diff -r 592f6c3641ba sql/sql_insert.cc
+--- a/sql/sql_insert.cc        Wed Jul 29 13:33:34 2009 -0700
++++ b/sql/sql_insert.cc        Wed Jul 29 13:34:11 2009 -0700
+@@ -990,6 +990,7 @@
      thd->row_count_func= info.copied + info.deleted + updated;
      ::send_ok(thd, (ulong) thd->row_count_func, id, buff);
    }
@@ -2327,7 +2335,7 @@ diff -r 1ac0113deff5 sql/sql_insert.cc
    thd->abort_on_warning= 0;
    DBUG_RETURN(FALSE);
  
-@@ -3064,6 +3065,7 @@
+@@ -3094,6 +3095,7 @@
      autoinc_value_of_first_inserted_row : thd->insert_id_used ?
      thd->last_insert_id : 0;
    ::send_ok(thd, (ulong) thd->row_count_func, id, buff);
@@ -2335,9 +2343,9 @@ diff -r 1ac0113deff5 sql/sql_insert.cc
    DBUG_RETURN(0);
  }
  
-diff -r 1ac0113deff5 sql/sql_lex.h
---- a/sql/sql_lex.h    Mon Jun 01 00:35:44 2009 -0700
-+++ b/sql/sql_lex.h    Mon Jun 01 00:36:01 2009 -0700
+diff -r 592f6c3641ba sql/sql_lex.h
+--- a/sql/sql_lex.h    Wed Jul 29 13:33:34 2009 -0700
++++ b/sql/sql_lex.h    Wed Jul 29 13:34:11 2009 -0700
 @@ -101,6 +101,9 @@
      When a command is added here, be sure it's also added in mysqld.cc
      in "struct show_var_st status_vars[]= {" ...
@@ -2348,9 +2356,9 @@ diff -r 1ac0113deff5 sql/sql_lex.h
    /* This should be the last !!! */
    SQLCOM_END
  };
-diff -r 1ac0113deff5 sql/sql_parse.cc
---- a/sql/sql_parse.cc Mon Jun 01 00:35:44 2009 -0700
-+++ b/sql/sql_parse.cc Mon Jun 01 00:36:01 2009 -0700
+diff -r 592f6c3641ba sql/sql_parse.cc
+--- a/sql/sql_parse.cc Wed Jul 29 13:33:34 2009 -0700
++++ b/sql/sql_parse.cc Wed Jul 29 13:34:11 2009 -0700
 @@ -78,6 +78,12 @@
                               const char *table_name);
  static bool check_show_create_table_access(THD *thd, TABLE_LIST *table);
@@ -2383,7 +2391,7 @@ diff -r 1ac0113deff5 sql/sql_parse.cc
  extern void win_install_sigabrt_handler(void);
  #endif
 @@ -504,6 +521,7 @@
-     mysql_log.write(thd,COM_CONNECT,ER(ER_NOT_SUPPORTED_AUTH_MODE));
+     mysql_log.write(thd,COM_CONNECT,"%s",ER(ER_NOT_SUPPORTED_AUTH_MODE));
      DBUG_RETURN(-1);
    }
 +  thd->diff_access_denied_errors++;
@@ -2872,7 +2880,7 @@ diff -r 1ac0113deff5 sql/sql_parse.cc
      netware_reg_user(sctx->ip, sctx->user, "MySQL");
  #endif
 @@ -1251,6 +1693,7 @@
-         net->vio && net->error && net->report_error)
+         (net->vio && net->error && net->report_error))
      {
        statistic_increment(aborted_threads, &LOCK_status);
 +      thd->diff_lost_connections++;
@@ -2912,7 +2920,7 @@ diff -r 1ac0113deff5 sql/sql_parse.cc
    /*
      Commands which always take a long time are logged into
      the slow log only if opt_log_slow_admin_statements is set.
-@@ -4540,6 +4995,15 @@
+@@ -4539,6 +4994,15 @@
      if (check_global_access(thd,RELOAD_ACL))
        goto error;
  
@@ -2928,7 +2936,7 @@ diff -r 1ac0113deff5 sql/sql_parse.cc
      /*
        reload_acl_and_cache() will tell us if we are allowed to write to the
        binlog or not.
-@@ -4848,6 +5312,7 @@
+@@ -4847,6 +5311,7 @@
      {
        if (check_global_access(thd, SUPER_ACL))
        {
@@ -2936,7 +2944,7 @@ diff -r 1ac0113deff5 sql/sql_parse.cc
          my_error(ER_SPECIFIC_ACCESS_DENIED_ERROR, MYF(0), "SUPER");
          goto create_sp_error;
        }
-@@ -5692,6 +6157,7 @@
+@@ -5691,6 +6156,7 @@
        if (!no_errors)
        {
          const char *db_name= db ? db : thd->db;
@@ -2944,7 +2952,7 @@ diff -r 1ac0113deff5 sql/sql_parse.cc
          my_error(ER_DBACCESS_DENIED_ERROR, MYF(0),
                   sctx->priv_user, sctx->priv_host, db_name);
        }
-@@ -5727,6 +6193,7 @@
+@@ -5726,6 +6192,7 @@
    {                                           // We can never grant this
      DBUG_PRINT("error",("No possible access"));
      if (!no_errors)
@@ -2952,7 +2960,7 @@ diff -r 1ac0113deff5 sql/sql_parse.cc
        my_error(ER_ACCESS_DENIED_ERROR, MYF(0),
                 sctx->priv_user,
                 sctx->priv_host,
-@@ -5759,11 +6226,15 @@
+@@ -5758,11 +6225,15 @@
  
    DBUG_PRINT("error",("Access denied"));
    if (!no_errors)
@@ -2968,7 +2976,7 @@ diff -r 1ac0113deff5 sql/sql_parse.cc
    DBUG_RETURN(TRUE);                          /* purecov: tested */
  #endif /* NO_EMBEDDED_ACCESS_CHECKS */
  }
-@@ -5797,6 +6268,7 @@
+@@ -5796,6 +6267,7 @@
    if ((thd->security_ctx->master_access & want_access))
      return 0;
    get_privilege_desc(command, sizeof(command), want_access);
@@ -2976,7 +2984,7 @@ diff -r 1ac0113deff5 sql/sql_parse.cc
    my_error(ER_SPECIFIC_ACCESS_DENIED_ERROR, MYF(0), command);
    return 1;
  #endif /* NO_EMBEDDED_ACCESS_CHECKS */
-@@ -5829,6 +6301,7 @@
+@@ -5828,6 +6300,7 @@
  
        if (!thd->col_access && check_grant_db(thd, dst_db_name))
        {
@@ -2984,7 +2992,7 @@ diff -r 1ac0113deff5 sql/sql_parse.cc
          my_error(ER_DBACCESS_DENIED_ERROR, MYF(0),
                   thd->security_ctx->priv_user,
                   thd->security_ctx->priv_host,
-@@ -5860,6 +6333,12 @@
+@@ -5859,6 +6332,12 @@
               check_grant(thd, SELECT_ACL, dst_table, 2, UINT_MAX, FALSE);
      }
  
@@ -2997,7 +3005,7 @@ diff -r 1ac0113deff5 sql/sql_parse.cc
    case SCH_OPEN_TABLES:
    case SCH_VARIABLES:
    case SCH_STATUS:
-@@ -5913,8 +6392,8 @@
+@@ -5912,8 +6391,8 @@
  #ifndef NO_EMBEDDED_ACCESS_CHECKS
    TABLE_LIST *org_tables= tables;
  #endif
@@ -3007,7 +3015,7 @@ diff -r 1ac0113deff5 sql/sql_parse.cc
    /*
      The check that first_not_own_table is not reached is for the case when
      the given table list refers to the list for prelocking (contains tables
-@@ -5931,9 +6410,12 @@
+@@ -5930,9 +6409,12 @@
          (want_access & ~(SELECT_ACL | EXTRA_ACL | FILE_ACL)))
      {
        if (!no_errors)
@@ -3020,7 +3028,7 @@ diff -r 1ac0113deff5 sql/sql_parse.cc
        return TRUE;
      }
      /*
-@@ -6443,6 +6925,30 @@
+@@ -6442,6 +6924,30 @@
    lex_start(thd);
    mysql_reset_thd_for_next_command(thd);
  
@@ -3051,7 +3059,7 @@ diff -r 1ac0113deff5 sql/sql_parse.cc
    if (query_cache_send_result_to_client(thd, (char*) inBuf, length) <= 0)
    {
      LEX *lex= thd->lex;
-@@ -6521,6 +7027,43 @@
+@@ -6520,6 +7026,43 @@
      *found_semicolon= NULL;
    }
  
@@ -3095,7 +3103,7 @@ diff -r 1ac0113deff5 sql/sql_parse.cc
    DBUG_VOID_RETURN;
  }
  
-@@ -7532,8 +8075,35 @@
+@@ -7531,8 +8074,35 @@
     pthread_mutex_unlock(&LOCK_active_mi);
   }
  #endif
@@ -3133,9 +3141,9 @@ diff -r 1ac0113deff5 sql/sql_parse.cc
   *write_to_binlog= tmp_write_to_binlog;
   return result;
  }
-diff -r 1ac0113deff5 sql/sql_prepare.cc
---- a/sql/sql_prepare.cc       Mon Jun 01 00:35:44 2009 -0700
-+++ b/sql/sql_prepare.cc       Mon Jun 01 00:36:01 2009 -0700
+diff -r 592f6c3641ba sql/sql_prepare.cc
+--- a/sql/sql_prepare.cc       Wed Jul 29 13:33:34 2009 -0700
++++ b/sql/sql_prepare.cc       Wed Jul 29 13:34:11 2009 -0700
 @@ -81,6 +81,9 @@
  #include <mysql_com.h>
  #endif
@@ -3471,9 +3479,9 @@ diff -r 1ac0113deff5 sql/sql_prepare.cc
    DBUG_VOID_RETURN;
  }
  
-diff -r 1ac0113deff5 sql/sql_show.cc
---- a/sql/sql_show.cc  Mon Jun 01 00:35:44 2009 -0700
-+++ b/sql/sql_show.cc  Mon Jun 01 00:36:01 2009 -0700
+diff -r 592f6c3641ba sql/sql_show.cc
+--- a/sql/sql_show.cc  Wed Jul 29 13:33:34 2009 -0700
++++ b/sql/sql_show.cc  Wed Jul 29 13:34:11 2009 -0700
 @@ -540,6 +540,7 @@
                sctx->master_access);
    if (!(db_access & DB_ACLS) && (!grant_option || check_grant_db(thd,dbname)))
@@ -3815,7 +3823,7 @@ diff -r 1ac0113deff5 sql/sql_show.cc
 +
 +ST_FIELD_INFO client_stats_fields_info[]=
 +{
-+  {"CLIENT", 16, MYSQL_TYPE_STRING, 0, 0, "Client"},
++  {"CLIENT", LIST_PROCESS_HOST_LEN, MYSQL_TYPE_STRING, 0, 0, "Client"},
 +  {"TOTAL_CONNECTIONS", MY_INT64_NUM_DECIMAL_DIGITS, MYSQL_TYPE_LONG, 0, 0, "Total_connections"},
 +  {"CONCURRENT_CONNECTIONS", MY_INT64_NUM_DECIMAL_DIGITS, MYSQL_TYPE_LONG, 0, 0, "Concurrent_connections"},
 +  {"CONNECTED_TIME", MY_INT64_NUM_DECIMAL_DIGITS, MYSQL_TYPE_LONG, 0, 0, "Connected_time"},
@@ -3894,10 +3902,10 @@ diff -r 1ac0113deff5 sql/sql_show.cc
    {"VARIABLES", variables_fields_info, create_schema_table, fill_variables,
     make_old_format, 0, -1, -1, 1},
    {"VIEWS", view_fields_info, create_schema_table, 
-diff -r 1ac0113deff5 sql/sql_update.cc
---- a/sql/sql_update.cc        Mon Jun 01 00:35:44 2009 -0700
-+++ b/sql/sql_update.cc        Mon Jun 01 00:36:01 2009 -0700
-@@ -604,7 +604,8 @@
+diff -r 592f6c3641ba sql/sql_update.cc
+--- a/sql/sql_update.cc        Wed Jul 29 13:33:34 2009 -0700
++++ b/sql/sql_update.cc        Wed Jul 29 13:34:11 2009 -0700
+@@ -601,7 +601,8 @@
        (thd->client_capabilities & CLIENT_FOUND_ROWS) ? found : updated;
      send_ok(thd, (ulong) thd->row_count_func,
            thd->insert_id_used ? thd->last_insert_id : 0L,buff);
@@ -3907,16 +3915,16 @@ diff -r 1ac0113deff5 sql/sql_update.cc
    }
    thd->count_cuted_fields= CHECK_FIELD_IGNORE;                /* calc cuted fields */
    thd->abort_on_warning= 0;
-@@ -1835,5 +1836,6 @@
+@@ -1832,5 +1833,6 @@
      (thd->client_capabilities & CLIENT_FOUND_ROWS) ? found : updated;
    ::send_ok(thd, (ulong) thd->row_count_func,
            thd->insert_id_used ? thd->last_insert_id : 0L,buff);
 +  thd->updated_row_count += thd->row_count_func;
    return FALSE;
  }
-diff -r 1ac0113deff5 sql/sql_yacc.yy
---- a/sql/sql_yacc.yy  Mon Jun 01 00:35:44 2009 -0700
-+++ b/sql/sql_yacc.yy  Mon Jun 01 00:36:01 2009 -0700
+diff -r 592f6c3641ba sql/sql_yacc.yy
+--- a/sql/sql_yacc.yy  Wed Jul 29 13:33:34 2009 -0700
++++ b/sql/sql_yacc.yy  Wed Jul 29 13:34:11 2009 -0700
 @@ -523,6 +523,7 @@
  %token  CHECK_SYM
  %token  CIPHER_SYM
@@ -4052,18 +4060,18 @@ diff -r 1ac0113deff5 sql/sql_yacc.yy
        | USE_FRM               {}
        | VARIABLES             {}
        | VIEW_SYM              {}
-diff -r 1ac0113deff5 sql/structs.h
---- a/sql/structs.h    Mon Jun 01 00:35:44 2009 -0700
-+++ b/sql/structs.h    Mon Jun 01 00:36:01 2009 -0700
+diff -r 592f6c3641ba sql/structs.h
+--- a/sql/structs.h    Wed Jul 29 13:33:34 2009 -0700
++++ b/sql/structs.h    Wed Jul 29 13:34:11 2009 -0700
 @@ -273,6 +273,98 @@
    time_t intime;
  } USER_CONN;
  
 +typedef struct st_user_stats {
-+  char user[USERNAME_LENGTH + 1];
++  char user[max(USERNAME_LENGTH, LIST_PROCESS_HOST_LEN) + 1];
 +  // Account name the user is mapped to when this is a user from mapped_user.
 +  // Otherwise, the same value as user.
-+  char priv_user[USERNAME_LENGTH + 1];
++  char priv_user[max(USERNAME_LENGTH, LIST_PROCESS_HOST_LEN) + 1];
 +  uint total_connections;
 +  uint concurrent_connections;
 +  time_t connected_time;  // in seconds
@@ -4154,9 +4162,9 @@ diff -r 1ac0113deff5 sql/structs.h
        /* Bits in form->update */
  #define REG_MAKE_DUPP         1       /* Make a copy of record when read */
  #define REG_NEW_RECORD                2       /* Write a new record if not found */
-diff -r 1ac0113deff5 sql/table.h
---- a/sql/table.h      Mon Jun 01 00:35:44 2009 -0700
-+++ b/sql/table.h      Mon Jun 01 00:36:01 2009 -0700
+diff -r 592f6c3641ba sql/table.h
+--- a/sql/table.h      Wed Jul 29 13:33:34 2009 -0700
++++ b/sql/table.h      Wed Jul 29 13:34:11 2009 -0700
 @@ -371,10 +371,12 @@
  enum enum_schema_tables
  {
@@ -4181,9 +4189,9 @@ diff -r 1ac0113deff5 sql/table.h
    SCH_VARIABLES,
    SCH_VIEWS
  };
-diff -r 1ac0113deff5 strings/Makefile.in
---- a/strings/Makefile.in      Mon Jun 01 00:35:44 2009 -0700
-+++ b/strings/Makefile.in      Mon Jun 01 00:36:01 2009 -0700
+diff -r 592f6c3641ba strings/Makefile.in
+--- a/strings/Makefile.in      Wed Jul 29 13:33:34 2009 -0700
++++ b/strings/Makefile.in      Wed Jul 29 13:34:11 2009 -0700
 @@ -342,6 +342,7 @@
  LIBDL = @LIBDL@
  LIBEDIT_LOBJECTS = @LIBEDIT_LOBJECTS@
@@ -4192,9 +4200,9 @@ diff -r 1ac0113deff5 strings/Makefile.in
  LIBS = @LIBS@
  LIBTOOL = @LIBTOOL@
  LIB_EXTRA_CCFLAGS = @LIB_EXTRA_CCFLAGS@
-diff -r 1ac0113deff5 support-files/MacOSX/Makefile.in
---- a/support-files/MacOSX/Makefile.in Mon Jun 01 00:35:44 2009 -0700
-+++ b/support-files/MacOSX/Makefile.in Mon Jun 01 00:36:01 2009 -0700
+diff -r 592f6c3641ba support-files/MacOSX/Makefile.in
+--- a/support-files/MacOSX/Makefile.in Wed Jul 29 13:33:34 2009 -0700
++++ b/support-files/MacOSX/Makefile.in Wed Jul 29 13:34:11 2009 -0700
 @@ -148,6 +148,7 @@
  LIBDL = @LIBDL@
  LIBEDIT_LOBJECTS = @LIBEDIT_LOBJECTS@
@@ -4203,9 +4211,9 @@ diff -r 1ac0113deff5 support-files/MacOSX/Makefile.in
  LIBS = @LIBS@
  LIBTOOL = @LIBTOOL@
  LIB_EXTRA_CCFLAGS = @LIB_EXTRA_CCFLAGS@
-diff -r 1ac0113deff5 support-files/Makefile.in
---- a/support-files/Makefile.in        Mon Jun 01 00:35:44 2009 -0700
-+++ b/support-files/Makefile.in        Mon Jun 01 00:36:01 2009 -0700
+diff -r 592f6c3641ba support-files/Makefile.in
+--- a/support-files/Makefile.in        Wed Jul 29 13:33:34 2009 -0700
++++ b/support-files/Makefile.in        Wed Jul 29 13:34:11 2009 -0700
 @@ -171,6 +171,7 @@
  LIBDL = @LIBDL@
  LIBEDIT_LOBJECTS = @LIBEDIT_LOBJECTS@
@@ -4214,9 +4222,9 @@ diff -r 1ac0113deff5 support-files/Makefile.in
  LIBS = @LIBS@
  LIBTOOL = @LIBTOOL@
  LIB_EXTRA_CCFLAGS = @LIB_EXTRA_CCFLAGS@
-diff -r 1ac0113deff5 support-files/RHEL4-SElinux/Makefile.in
---- a/support-files/RHEL4-SElinux/Makefile.in  Mon Jun 01 00:35:44 2009 -0700
-+++ b/support-files/RHEL4-SElinux/Makefile.in  Mon Jun 01 00:36:01 2009 -0700
+diff -r 592f6c3641ba support-files/RHEL4-SElinux/Makefile.in
+--- a/support-files/RHEL4-SElinux/Makefile.in  Wed Jul 29 13:33:34 2009 -0700
++++ b/support-files/RHEL4-SElinux/Makefile.in  Wed Jul 29 13:34:11 2009 -0700
 @@ -146,6 +146,7 @@
  LIBDL = @LIBDL@
  LIBEDIT_LOBJECTS = @LIBEDIT_LOBJECTS@
@@ -4225,9 +4233,9 @@ diff -r 1ac0113deff5 support-files/RHEL4-SElinux/Makefile.in
  LIBS = @LIBS@
  LIBTOOL = @LIBTOOL@
  LIB_EXTRA_CCFLAGS = @LIB_EXTRA_CCFLAGS@
-diff -r 1ac0113deff5 tests/Makefile.in
---- a/tests/Makefile.in        Mon Jun 01 00:35:44 2009 -0700
-+++ b/tests/Makefile.in        Mon Jun 01 00:36:01 2009 -0700
+diff -r 592f6c3641ba tests/Makefile.in
+--- a/tests/Makefile.in        Wed Jul 29 13:33:34 2009 -0700
++++ b/tests/Makefile.in        Wed Jul 29 13:34:11 2009 -0700
 @@ -193,6 +193,7 @@
  LIBDL = @LIBDL@
  LIBEDIT_LOBJECTS = @LIBEDIT_LOBJECTS@
@@ -4236,9 +4244,9 @@ diff -r 1ac0113deff5 tests/Makefile.in
  LIBS = @CLIENT_LIBS@
  LIBTOOL = @LIBTOOL@
  LIB_EXTRA_CCFLAGS = @LIB_EXTRA_CCFLAGS@
-diff -r 1ac0113deff5 tools/Makefile.in
---- a/tools/Makefile.in        Mon Jun 01 00:35:44 2009 -0700
-+++ b/tools/Makefile.in        Mon Jun 01 00:36:01 2009 -0700
+diff -r 592f6c3641ba tools/Makefile.in
+--- a/tools/Makefile.in        Wed Jul 29 13:33:34 2009 -0700
++++ b/tools/Makefile.in        Wed Jul 29 13:34:11 2009 -0700
 @@ -167,6 +167,7 @@
  LIBDL = @LIBDL@
  LIBEDIT_LOBJECTS = @LIBEDIT_LOBJECTS@
@@ -4247,9 +4255,9 @@ diff -r 1ac0113deff5 tools/Makefile.in
  LIBS = @LIBS@
  LIBTOOL = @LIBTOOL@
  LIB_EXTRA_CCFLAGS = @LIB_EXTRA_CCFLAGS@
-diff -r 1ac0113deff5 vio/Makefile.in
---- a/vio/Makefile.in  Mon Jun 01 00:35:44 2009 -0700
-+++ b/vio/Makefile.in  Mon Jun 01 00:36:01 2009 -0700
+diff -r 592f6c3641ba vio/Makefile.in
+--- a/vio/Makefile.in  Wed Jul 29 13:33:34 2009 -0700
++++ b/vio/Makefile.in  Wed Jul 29 13:34:11 2009 -0700
 @@ -176,6 +176,7 @@
  LIBDL = @LIBDL@
  LIBEDIT_LOBJECTS = @LIBEDIT_LOBJECTS@
@@ -4258,9 +4266,9 @@ diff -r 1ac0113deff5 vio/Makefile.in
  LIBS = @LIBS@
  LIBTOOL = @LIBTOOL@
  LIB_EXTRA_CCFLAGS = @LIB_EXTRA_CCFLAGS@
-diff -r 1ac0113deff5 win/Makefile.in
---- a/win/Makefile.in  Mon Jun 01 00:35:44 2009 -0700
-+++ b/win/Makefile.in  Mon Jun 01 00:36:01 2009 -0700
+diff -r 592f6c3641ba win/Makefile.in
+--- a/win/Makefile.in  Wed Jul 29 13:33:34 2009 -0700
++++ b/win/Makefile.in  Wed Jul 29 13:34:11 2009 -0700
 @@ -144,6 +144,7 @@
  LIBDL = @LIBDL@
  LIBEDIT_LOBJECTS = @LIBEDIT_LOBJECTS@
@@ -4269,9 +4277,9 @@ diff -r 1ac0113deff5 win/Makefile.in
  LIBS = @LIBS@
  LIBTOOL = @LIBTOOL@
  LIB_EXTRA_CCFLAGS = @LIB_EXTRA_CCFLAGS@
-diff -r 1ac0113deff5 zlib/Makefile.in
---- a/zlib/Makefile.in Mon Jun 01 00:35:44 2009 -0700
-+++ b/zlib/Makefile.in Mon Jun 01 00:36:01 2009 -0700
+diff -r 592f6c3641ba zlib/Makefile.in
+--- a/zlib/Makefile.in Wed Jul 29 13:33:34 2009 -0700
++++ b/zlib/Makefile.in Wed Jul 29 13:34:11 2009 -0700
 @@ -187,6 +187,7 @@
  LIBDL = @LIBDL@
  LIBEDIT_LOBJECTS = @LIBEDIT_LOBJECTS@
index a19fb377dba1bc0bdf28523f829e980c4404b1ee..2581941e309b5d808f6ce6c34df98c2574f4aeee 100644 (file)
@@ -65,24 +65,26 @@ Patch13:    %{name}-bug-34192.patch
 Patch14:       %{name}-bug-16470.patch
 Patch15:       %{name}-system-users.patch
 # <percona patches, http://www.percona.com/percona-lab.html>
-Patch16:       %{name}-show_patches.patch
-Patch17:       %{name}-microslow_innodb.patch
-Patch18:       %{name}-profiling_slow.patch
-Patch19:       %{name}-userstatv2.patch
-Patch20:       %{name}-microsec_process.patch
-Patch21:       %{name}-innodb_io_patches.patch
-Patch22:       %{name}-innodb_locks_held.patch
-Patch23:       %{name}-innodb_show_bp.patch
-Patch24:       %{name}-innodb_check_fragmentation.patch
-Patch25:       %{name}-innodb_io_pattern.patch
-Patch26:       %{name}-innodb_fsync_source.patch
-Patch27:       %{name}-innodb_show_hashed_memory.patch
-Patch28:       %{name}-innodb_dict_size_limit.patch
-Patch29:       %{name}-innodb_extra_rseg.patch
-Patch30:       %{name}-innodb_thread_concurrency_timer_based.patch
-Patch31:       %{name}-split_buf_pool_mutex_fixed_optimistic_safe.patch
-Patch32:       %{name}-innodb_rw_lock.patch
-Patch33:       %{name}-mysql-test.patch
+Patch100:      %{name}-show_patches.patch
+Patch101:      %{name}-microslow_innodb.patch
+Patch102:      %{name}-profiling_slow.patch
+Patch103:      %{name}-userstatv2.patch
+Patch104:      %{name}-microsec_process.patch
+Patch105:      %{name}-innodb_io_patches.patch
+Patch106:      %{name}-innodb_locks_held.patch
+Patch107:      %{name}-innodb_show_bp.patch
+Patch108:      %{name}-innodb_check_fragmentation.patch
+Patch109:      %{name}-innodb_io_pattern.patch
+Patch110:      %{name}-innodb_fsync_source.patch
+Patch111:      %{name}-innodb_show_hashed_memory.patch
+Patch112:      %{name}-innodb_dict_size_limit.patch
+Patch113:      %{name}-innodb_extra_rseg.patch
+Patch114:      %{name}-innodb_thread_concurrency_timer_based.patch
+Patch115:      %{name}-innodb_use_sys_malloc.patch
+Patch116:      %{name}-innodb_recovery_patches.patch
+Patch117:      %{name}-innodb_split_buf_pool_mutex.patch
+Patch118:      %{name}-innodb_rw_lock.patch
+Patch119:      %{name}-mysql-test.patch
 # </percona>
 Patch34:       %{name}-errorlog-no-rename.patch
 Patch35:       %{name}-alpha-stack.patch
@@ -515,24 +517,30 @@ mv sphinx-*/mysqlse sql/sphinx
 %patch13 -p1
 %patch14 -p1
 %patch15 -p1
-%patch16 -p1
-%patch17 -p1
-%patch18 -p1
-%patch19 -p1
-%patch20 -p1
-%patch21 -p1
-%patch22 -p1
-%patch23 -p1
-%patch24 -p1
-%patch25 -p1
-%patch26 -p1
-%patch27 -p1
-%patch28 -p1
-%patch29 -p1
-%patch30 -p1
-%patch31 -p1
-%patch32 -p1
-%patch33 -p1
+
+# <percona %patches
+%patch100 -p1
+%patch101 -p1
+%patch102 -p1
+%patch103 -p1
+%patch104 -p1
+%patch105 -p1
+%patch106 -p1
+%patch107 -p1
+%patch108 -p1
+%patch109 -p1
+%patch110 -p1
+%patch111 -p1
+%patch112 -p1
+%patch113 -p1
+%patch114 -p1
+%patch115 -p1
+%patch116 -p1
+%patch117 -p1
+%patch118 -p1
+%patch119 -p1
+# </percona>
+
 %patch34 -p1
 %ifarch alpha
 %patch35 -p1
This page took 1.060067 seconds and 4 git commands to generate.