diff options
author | unknown <aivanov@mysql.com> | 2005-12-13 21:35:24 +0300 |
---|---|---|
committer | unknown <aivanov@mysql.com> | 2005-12-13 21:35:24 +0300 |
commit | 778d212b8ceb266c4c8cd2276fcf548c4c0851a3 (patch) | |
tree | 7a6cff8fdb54472ba07a9cea2610e458af775dd2 /innobase/srv | |
parent | 3bef007191f1e26a68f34c085f6d6611f5a9c388 (diff) | |
download | mariadb-git-778d212b8ceb266c4c8cd2276fcf548c4c0851a3.tar.gz |
Fix BUG#12071: "Windows hang:'Opening tables' or 'Waiting for
table' lockup".
Changes from the innodb-5.0-ss92 snapshot.
Do not call os_file_create_tmpfile() at runtime. Instead, create
all tempfiles at startup and guard access to them with mutexes.
innobase/btr/btr0sea.c:
Changes from the innodb-5.0ss92 snapshot.
innobase/include/buf0buf.h:
Changes from the innodb-5.0ss92 snapshot.
innobase/include/os0file.h:
Changes from the innodb-5.0ss92 snapshot.
innobase/include/srv0srv.h:
Changes from the innodb-5.0ss92 snapshot.
innobase/row/row0ins.c:
Changes from the innodb-5.0ss92 snapshot.
innobase/srv/srv0srv.c:
Changes from the innodb-5.0ss92 snapshot.
innobase/srv/srv0start.c:
Changes from the innodb-5.0ss92 snapshot.
mysql-test/r/innodb.result:
Changes from the innodb-5.0ss92 snapshot.
mysql-test/t/innodb.test:
Changes from the innodb-5.0ss92 snapshot.
sql/ha_innodb.cc:
Changes from the innodb-5.0ss92 snapshot.
Diffstat (limited to 'innobase/srv')
-rw-r--r-- | innobase/srv/srv0srv.c | 12 | ||||
-rw-r--r-- | innobase/srv/srv0start.c | 27 |
2 files changed, 38 insertions, 1 deletions
diff --git a/innobase/srv/srv0srv.c b/innobase/srv/srv0srv.c index c585536baee..6e0b9b23266 100644 --- a/innobase/srv/srv0srv.c +++ b/innobase/srv/srv0srv.c @@ -397,6 +397,18 @@ mutex_t srv_innodb_monitor_mutex; mutex_t srv_monitor_file_mutex; /* Temporary file for innodb monitor output */ FILE* srv_monitor_file; +/* Mutex for locking srv_dict_tmpfile. +This mutex has a very high rank; threads reserving it should not +be holding any InnoDB latches. */ +mutex_t srv_dict_tmpfile_mutex; +/* Temporary file for output from the data dictionary */ +FILE* srv_dict_tmpfile; +/* Mutex for locking srv_misc_tmpfile. +This mutex has a very low rank; threads reserving it should not +acquire any further latches or sleep before releasing this one. */ +mutex_t srv_misc_tmpfile_mutex; +/* Temporary file for miscellanous diagnostic output */ +FILE* srv_misc_tmpfile; ulint srv_main_thread_process_no = 0; ulint srv_main_thread_id = 0; diff --git a/innobase/srv/srv0start.c b/innobase/srv/srv0start.c index e5151ebf631..4f99f340e1c 100644 --- a/innobase/srv/srv0start.c +++ b/innobase/srv/srv0start.c @@ -1180,6 +1180,20 @@ NetWare. */ } } + mutex_create(&srv_dict_tmpfile_mutex); + mutex_set_level(&srv_dict_tmpfile_mutex, SYNC_DICT_OPERATION); + srv_dict_tmpfile = os_file_create_tmpfile(); + if (!srv_dict_tmpfile) { + return(DB_ERROR); + } + + mutex_create(&srv_misc_tmpfile_mutex); + mutex_set_level(&srv_misc_tmpfile_mutex, SYNC_ANY_LATCH); + srv_misc_tmpfile = os_file_create_tmpfile(); + if (!srv_misc_tmpfile) { + return(DB_ERROR); + } + /* Restrict the maximum number of file i/o threads */ if (srv_n_file_io_threads > SRV_MAX_N_IO_THREADS) { @@ -1822,8 +1836,19 @@ innobase_shutdown_for_mysql(void) mem_free(srv_monitor_file_name); } } - + if (srv_dict_tmpfile) { + fclose(srv_dict_tmpfile); + srv_dict_tmpfile = 0; + } + + if (srv_misc_tmpfile) { + fclose(srv_misc_tmpfile); + srv_misc_tmpfile = 0; + } + mutex_free(&srv_monitor_file_mutex); + mutex_free(&srv_dict_tmpfile_mutex); + mutex_free(&srv_misc_tmpfile_mutex); /* 3. Free all InnoDB's own mutexes and the os_fast_mutexes inside them */ |