Commit 98546caa authored by marko's avatar marko

branches/zip: page_zip_apply_log(): Write the status bits of the record

before invoking rec_get_offsets().
parent 9a9a952c
...@@ -1713,20 +1713,6 @@ page_zip_apply_log( ...@@ -1713,20 +1713,6 @@ page_zip_apply_log(
/* Determine the heap number and status bits of the record. */ /* Determine the heap number and status bits of the record. */
rec = recs[(val >> 1) - 1]; rec = recs[(val >> 1) - 1];
if (val & 1) {
/* Clear the data bytes of the record. */
mem_heap_t* heap = NULL;
ulint* offs;
offs = rec_get_offsets(rec, index, offsets,
ULINT_UNDEFINED, &heap);
memset(rec, 0, rec_offs_data_size(offs));
if (UNIV_LIKELY_NULL(heap)) {
mem_heap_free(heap);
}
continue;
}
hs = ((val >> 1) + 1) << REC_HEAP_NO_SHIFT; hs = ((val >> 1) + 1) << REC_HEAP_NO_SHIFT;
hs |= heap_status & ((1 << REC_HEAP_NO_SHIFT) - 1); hs |= heap_status & ((1 << REC_HEAP_NO_SHIFT) - 1);
...@@ -1738,10 +1724,29 @@ page_zip_apply_log( ...@@ -1738,10 +1724,29 @@ page_zip_apply_log(
return(NULL); return(NULL);
} else if (hs == heap_status) { } else if (hs == heap_status) {
/* A new record was allocated from the heap. */ /* A new record was allocated from the heap. */
if (UNIV_UNLIKELY(val & 1)) {
/* Only existing records may be cleared. */
return(NULL);
}
heap_status += 1 << REC_HEAP_NO_SHIFT; heap_status += 1 << REC_HEAP_NO_SHIFT;
} }
mach_write_to_2(rec - REC_NEW_HEAP_NO, hs); mach_write_to_2(rec - REC_NEW_HEAP_NO, hs);
if (val & 1) {
/* Clear the data bytes of the record. */
mem_heap_t* heap = NULL;
ulint* offs;
offs = rec_get_offsets(rec, index, offsets,
ULINT_UNDEFINED, &heap);
memset(rec, 0, rec_offs_data_size(offs));
if (UNIV_LIKELY_NULL(heap)) {
mem_heap_free(heap);
}
continue;
}
#if REC_STATUS_NODE_PTR != TRUE #if REC_STATUS_NODE_PTR != TRUE
# error "REC_STATUS_NODE_PTR != TRUE" # error "REC_STATUS_NODE_PTR != TRUE"
#endif #endif
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment