mirror of
https://github.com/MariaDB/server.git
synced 2025-01-17 12:32:27 +01:00
13d53bf657
Changed format for REDO_INSERT_ROWS_BLOBS Fixed several bugs in handling of big blobs Added redo_free_head_or_tail() & redo_insert_row_blobs() Added uuid to control file maria_checks now verifies that not used part of bitmap is 0 REDO_PURGE_BLOCKS -> REDO_FREE_BLOCKS Added REDO_FREE_HEAD_OR_TAIL Fixes problem when trying to read block outside of file during REDO include/my_global.h: STACK_DIRECTION is already set by configure mysql-test/r/maria.result: Updated results mysql-test/t/maria.test: Test shrinking of VARCHAR mysys/my_realloc.c: Fixed indentation mysys/safemalloc.c: Fixed indentation sql/filesort.cc: Removed some casts sql/mysqld.cc: Added missing setting of myisam_stats_method_str sql/uniques.cc: Removed some casts storage/maria/ma_bitmap.c: Added printing of bitmap (for debugging) Renamed _ma_print_bitmap() -> _ma_print_bitmap_changes() Added _ma_set_full_page_bits() Fixed bug in ma_bitmap_find_new_place() (affecting updates) when using big files storage/maria/ma_blockrec.c: Changed format for REDO_INSERT_ROWS_BLOBS Fixed several bugs in handling of big blobs Added code to fix some cases where redo when using blobs didn't produce idenital .MAD files as normal usage REDO_FREE_ROW_BLOCKS doesn't anymore change pages; We only mark things free in bitmap Remove TAIL and filler extents from REDO_FREE_BLOCKS log entry. (Fixed some asserts) REDO_PURGE_BLOCKS -> REDO_FREE_BLOCKS Delete tails in update. (Fixed bug when doing update that shrinks blob/varchar length) Fixed bug when doing insert in block outside of file size. Added redo_free_head_or_tail() & redo_insert_row_blobs() Added pagecache_unlock_by_link() when read fails. Much more comments, DBUG and ASSERT entries storage/maria/ma_blockrec.h: Prototypes of new functions Define of SUB_RANGE_SIZE & BLOCK_FILLER_SIZE storage/maria/ma_check.c: Verify that not used part of bitmap is 0 storage/maria/ma_control_file.c: Added uuid to control file storage/maria/ma_loghandler.c: REDO_PURGE_BLOCKS -> REDO_FREE_BLOCKS Added REDO_FREE_HEAD_OR_TAIL storage/maria/ma_loghandler.h: REDO_PURGE_BLOCKS -> REDO_FREE_BLOCKS Added REDO_FREE_HEAD_OR_TAIL storage/maria/ma_pagecache.c: If we write full block, remove error flag for block. (Fixes problem when trying to read block outside of file) storage/maria/ma_recovery.c: REDO_PURGE_BLOCKS -> REDO_FREE_BLOCKS Added REDO_FREE_HEAD_OR_TAIL storage/maria/ma_test1.c: Allow option after 'b' to be compatible with ma_test2 (This is just to simplify test scripts like ma_test_recovery) storage/maria/ma_test2.c: Default size of blob is now 1000 instead of 1 storage/maria/ma_test_all.sh: Added test for bigger blobs storage/maria/ma_test_recovery.expected: Updated results storage/maria/ma_test_recovery: Added test for bigger blobs
76 lines
2.3 KiB
C
76 lines
2.3 KiB
C
/* Copyright (C) 2000 MySQL AB
|
|
|
|
This program is free software; you can redistribute it and/or modify
|
|
it under the terms of the GNU General Public License as published by
|
|
the Free Software Foundation; version 2 of the License.
|
|
|
|
This program is distributed in the hope that it will be useful,
|
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
GNU General Public License for more details.
|
|
|
|
You should have received a copy of the GNU General Public License
|
|
along with this program; if not, write to the Free Software
|
|
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */
|
|
|
|
#ifdef SAFEMALLOC /* We don't need SAFEMALLOC here */
|
|
#undef SAFEMALLOC
|
|
#endif
|
|
|
|
#include "mysys_priv.h"
|
|
#include "mysys_err.h"
|
|
|
|
/* My memory re allocator */
|
|
|
|
/**
|
|
@brief wrapper around realloc()
|
|
|
|
@param oldpoint pointer to currently allocated area
|
|
@param size new size requested, must be >0
|
|
@param my_flags flags
|
|
|
|
@note if size==0 realloc() may return NULL; my_realloc() treats this as an
|
|
error which is not the intention of realloc()
|
|
*/
|
|
|
|
void* my_realloc(void* oldpoint, size_t size, myf my_flags)
|
|
{
|
|
void *point;
|
|
DBUG_ENTER("my_realloc");
|
|
DBUG_PRINT("my",("ptr: 0x%lx size: %lu my_flags: %d", (long) oldpoint,
|
|
(ulong) size, my_flags));
|
|
|
|
DBUG_ASSERT(size > 0);
|
|
if (!oldpoint && (my_flags & MY_ALLOW_ZERO_PTR))
|
|
DBUG_RETURN(my_malloc(size,my_flags));
|
|
#ifdef USE_HALLOC
|
|
if (!(point = malloc(size)))
|
|
{
|
|
if (my_flags & MY_FREE_ON_ERROR)
|
|
my_free(oldpoint,my_flags);
|
|
if (my_flags & MY_HOLD_ON_ERROR)
|
|
DBUG_RETURN(oldpoint);
|
|
my_errno=errno;
|
|
if (my_flags & MY_FAE+MY_WME)
|
|
my_error(EE_OUTOFMEMORY, MYF(ME_BELL+ME_WAITTANG),size);
|
|
}
|
|
else
|
|
{
|
|
memcpy(point,oldpoint,size);
|
|
free(oldpoint);
|
|
}
|
|
#else
|
|
if ((point= (uchar*) realloc(oldpoint,size)) == NULL)
|
|
{
|
|
if (my_flags & MY_FREE_ON_ERROR)
|
|
my_free(oldpoint, my_flags);
|
|
if (my_flags & MY_HOLD_ON_ERROR)
|
|
DBUG_RETURN(oldpoint);
|
|
my_errno=errno;
|
|
if (my_flags & (MY_FAE+MY_WME))
|
|
my_error(EE_OUTOFMEMORY, MYF(ME_BELL+ME_WAITTANG), size);
|
|
}
|
|
#endif
|
|
DBUG_PRINT("exit",("ptr: 0x%lx", (long) point));
|
|
DBUG_RETURN(point);
|
|
} /* my_realloc */
|