BUG#25712 - insert delayed and check table run together report crashed
tables In case system doesn't have native pread/pwrite calls (e.g. Windows) and there is CHECK TABLE runs concurrently with another statement that reads from a table, the table may be reported as crashed. This is fixed by locking file descriptor when my_seek is executed on MyISAM index file and emulated pread/pwrite may be executed concurrently. Affects MyISAM tables on platforms that do not have native pread/pwrite calls (e.g. Windows). No deterministic test case for this bug. myisam/mi_check.c: Key file descriptor is shared among threads and mixed set of my_pread/my_pwrite and my_seek calls is possible. This is not a problem on systems that have native pread/pwrite calls. In case system doesn't have native pread/pwrite calls (e.g. Windows) we must ensure that my_pread/my_pwrite are not executed at the same time with my_seek. This is done by passing MY_THREADSAFE flag to my_seek. mysys/my_seek.c: On platforms that do not have native pread/pwrite calls (e.g. Windows) these calls are emulated as follow: lock fd, lseek, read, unlock fd. In case file descriptor is shared among threads, where one thread executes my_pread and another thread executes my_seek, we may read from a wrong position. This may happen because my_seek doesn't lock fd and thus may be executed by another thread after emulated pread has done lseek and before it has done read. To fix problem mentioned above we introduce new flag MY_THREADSAFE to my_seek, which is meaningful only in case pread/pwrite calls are emulated. If this flag is set, lseek operation is performed as follow: lock fd, seek, unlock fd.
Showing
Please register or sign in to comment