diff options
author | Vladislav Vaintroub <wlad@mariadb.com> | 2017-06-12 18:43:23 +0000 |
---|---|---|
committer | Vladislav Vaintroub <wlad@mariadb.com> | 2017-06-12 18:43:23 +0000 |
commit | 74e4cf70d09bbe7a0a530bc50895820e04466194 (patch) | |
tree | 6118e61367077d04ba453a53bfaaa6b1ca1653f3 | |
parent | 75b35a3b6897a0fcef28d73a480d6d9d65c7ac9b (diff) | |
download | mariadb-git-74e4cf70d09bbe7a0a530bc50895820e04466194.tar.gz |
MDEV-13059 XtraDB hangs on Windows due to failing to release block->lock X-latch
in innodb_read_only mode.
The reason for the hang is that there was no notification received about
completed read io. File handles are bound to completion_port, and there
were no background "write" threads that would be waiting on completion_port,
only 2 "read" threads waiting on read_completion_port were active.
The fix is to use a single IO completion port for all IOs, if
innodb_read_only is set.
-rw-r--r-- | mysql-test/suite/innodb/t/row_format_redundant.test | 10 | ||||
-rw-r--r-- | storage/xtradb/os/os0file.cc | 2 |
2 files changed, 1 insertions, 11 deletions
diff --git a/mysql-test/suite/innodb/t/row_format_redundant.test b/mysql-test/suite/innodb/t/row_format_redundant.test index 974588d11eb..b17b365651a 100644 --- a/mysql-test/suite/innodb/t/row_format_redundant.test +++ b/mysql-test/suite/innodb/t/row_format_redundant.test @@ -2,16 +2,6 @@ # Embedded mode doesn't allow restarting --source include/not_embedded.inc -# MDEV-13059 XtraDB hangs on Windows due to failing to release -# block->lock X-latch in innodb_read_only mode -if (`SELECT count(*) FROM information_schema.plugins WHERE - plugin_name = 'innodb' AND plugin_status = 'active' AND - plugin_description LIKE '%xtradb%'`){ - if (`SELECT @@version_compile_os IN ('Win32','Win64','Windows')`) { - skip MDEV-13059 XtraDB hangs on Windows in innodb_read_only mode; - } -} - create table t1 (a int not null, d varchar(15) not null, b varchar(198) not null, c char(156), fulltext ftsic(c)) engine=InnoDB diff --git a/storage/xtradb/os/os0file.cc b/storage/xtradb/os/os0file.cc index 5e67d2473f0..9be9c64b759 100644 --- a/storage/xtradb/os/os0file.cc +++ b/storage/xtradb/os/os0file.cc @@ -4163,7 +4163,7 @@ os_aio_init( #ifdef _WIN32 ut_a(completion_port == 0 && read_completion_port == 0); completion_port = CreateIoCompletionPort(INVALID_HANDLE_VALUE, NULL, 0, 0); - read_completion_port = CreateIoCompletionPort(INVALID_HANDLE_VALUE, NULL, 0, 0); + read_completion_port = srv_read_only_mode? completion_port : CreateIoCompletionPort(INVALID_HANDLE_VALUE, NULL, 0, 0); ut_a(completion_port && read_completion_port); #endif |