|
|
|
@ -1713,20 +1713,6 @@ page_zip_apply_log( |
|
|
|
/* Determine the heap number and status bits of the record. */ |
|
|
|
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 |= heap_status & ((1 << REC_HEAP_NO_SHIFT) - 1); |
|
|
|
|
|
|
|
@ -1738,10 +1724,29 @@ page_zip_apply_log( |
|
|
|
return(NULL); |
|
|
|
} else if (hs == heap_status) { |
|
|
|
/* 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; |
|
|
|
} |
|
|
|
|
|
|
|
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 |
|
|
|
# error "REC_STATUS_NODE_PTR != TRUE" |
|
|
|
#endif |
|
|
|
|