diff options
author | unknown <guilhem@gbichot4.local> | 2007-09-20 10:31:25 +0200 |
---|---|---|
committer | unknown <guilhem@gbichot4.local> | 2007-09-20 10:31:25 +0200 |
commit | be382b4220656eca2642943abca1f8ffcb1faaa2 (patch) | |
tree | 28a835fd32b892f7d747804f25b9ebc6a41f949b /storage/maria/ma_recovery.h | |
parent | 9c2ff270fa725954d91f6f3d13b0aeb9b3960f47 (diff) | |
download | mariadb-git-be382b4220656eca2642943abca1f8ffcb1faaa2.tar.gz |
Fix for segmentation fault when updating a record having a small
BLOB whose size didn't change. Fix for probably impossible problem
in Recovery.
mysql-test/r/maria.result:
result for new test
mysql-test/t/maria.test:
testcase for a bug (used to segfault)
storage/maria/ma_blockrec.c:
When writing a record, we put BLOBs into the head part if there is
room for them. "Is there room" was first decided by
!(tmp_data + length > end_of_data) (line 1894)
but then was tested again as
*blob_lengths < (ulong)(end_of_data - data). We see that in case of
equality, the first condition was true but the second was not,
so it was inconsistent and crashed later.
storage/maria/ma_recovery.c:
When wondering if recovery should update the state (like state.records):
if table was closed, its is_of_horizon was set to X, then
table was reopened and a REDO was written. If this REDO had LSN
X (as horizon is just a lower bound of the LSN of the next record),
we have to apply it. In practice this equality probably could not
happen because of LOGREC_FILE_ID would be written before the REDO.
Diffstat (limited to 'storage/maria/ma_recovery.h')
0 files changed, 0 insertions, 0 deletions