From c8b5fa4afc6c233101b8163ef19c1abc1be0373d Mon Sep 17 00:00:00 2001 From: Michael Widenius Date: Mon, 17 Jun 2019 17:50:08 +0300 Subject: MDEV-19055 Failures with temporary tables and Aria There was two separate problems: - Aria pagecache didn't properly handle re-reading of blocks that have given errors before (this triggered an assert) - temporary tables that where opened several times where not properly closed in ALTER, REPAIR or OPTIMIZE table Other things - Added a couple of asserts that will make it easier to find problems like this in the future. --- mysys/my_pread.c | 2 ++ 1 file changed, 2 insertions(+) (limited to 'mysys/my_pread.c') diff --git a/mysys/my_pread.c b/mysys/my_pread.c index 08285738528..15586d00a6f 100644 --- a/mysys/my_pread.c +++ b/mysys/my_pread.c @@ -68,6 +68,8 @@ size_t my_pread(File Filedes, uchar *Buffer, size_t Count, my_off_t offset, if (readbytes != Count) { + /* We should never read with wrong file descriptor! */ + DBUG_ASSERT(my_errno != 9); my_errno= errno; if (errno == 0 || (readbytes != (size_t) -1 && (MyFlags & (MY_NABP | MY_FNABP)))) -- cgit v1.2.1 From 81f60e8adeb241ed845427e0792349f3a05af99b Mon Sep 17 00:00:00 2001 From: Vladislav Vaintroub Date: Mon, 17 Jun 2019 18:04:22 +0100 Subject: Portability fix. --- mysys/my_pread.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'mysys/my_pread.c') diff --git a/mysys/my_pread.c b/mysys/my_pread.c index 15586d00a6f..9713deebbe5 100644 --- a/mysys/my_pread.c +++ b/mysys/my_pread.c @@ -69,7 +69,7 @@ size_t my_pread(File Filedes, uchar *Buffer, size_t Count, my_off_t offset, if (readbytes != Count) { /* We should never read with wrong file descriptor! */ - DBUG_ASSERT(my_errno != 9); + DBUG_ASSERT(my_errno != EBADF); my_errno= errno; if (errno == 0 || (readbytes != (size_t) -1 && (MyFlags & (MY_NABP | MY_FNABP)))) -- cgit v1.2.1 From 71eea0c3fb87f37f6377c9bdad9339b664b11d0f Mon Sep 17 00:00:00 2001 From: Vladislav Vaintroub Date: Mon, 17 Jun 2019 19:01:15 +0100 Subject: Fix debug assert to match its intention. Do not check my_errno before it is set, check errno instead. Also, do not check errno, if prior pread() did not fail. --- mysys/my_pread.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'mysys/my_pread.c') diff --git a/mysys/my_pread.c b/mysys/my_pread.c index 9713deebbe5..9d3fdb3e0ee 100644 --- a/mysys/my_pread.c +++ b/mysys/my_pread.c @@ -69,7 +69,7 @@ size_t my_pread(File Filedes, uchar *Buffer, size_t Count, my_off_t offset, if (readbytes != Count) { /* We should never read with wrong file descriptor! */ - DBUG_ASSERT(my_errno != EBADF); + DBUG_ASSERT(readbytes != (size_t)-1 || errno != EBADF); my_errno= errno; if (errno == 0 || (readbytes != (size_t) -1 && (MyFlags & (MY_NABP | MY_FNABP)))) -- cgit v1.2.1