| Bug #61417 | buf_block_is_uncompressed() seems wrong | ||
|---|---|---|---|
| Submitted: | 6 Jun 2011 6:47 | Modified: | 6 Jun 2011 6:51 |
| Reporter: | Yasufumi Kinoshita | Email Updates: | |
| Status: | Verified | Impact on me: | |
| Category: | MySQL Server: InnoDB Plugin storage engine | Severity: | S2 (Serious) |
| Version: | 5.5, 5.1 | OS: | Any |
| Assigned to: | Assigned Account | CPU Architecture: | Any |
[6 Jun 2011 6:51]
Valeriy Kravchuk
Thank you for the problem report.

Description: In buf0buf.c, the head of buf_block_is_uncompressed(), if (UNIV_UNLIKELY((((ulint) block) % sizeof *block) != 0)) { /* The pointer should be aligned. */ return(FALSE); } But I think the result is almost FALSE always. Because I added the assertion " /* if not pass, buf_block_is_uncompressed() works incorrectly. */ ut_a((((ulint) chunk->blocks) % sizeof(buf_block_t)) == 0); " just after "chunk->blocks = chunk->mem;" at buf_chunk_init() And, InnoDB-Plugin never startup. How to repeat: Just as described above. Suggested fix: Fix buf_block_is_uncompressed() or Add the assertion and fix chunk->blocks alignment at allocation