diff options
author | Jan Lindström <jan.lindstrom@skysql.com> | 2014-12-03 10:41:52 +0200 |
---|---|---|
committer | Jan Lindström <jan.lindstrom@skysql.com> | 2014-12-03 10:41:52 +0200 |
commit | d4aef382fd9e3cc10ed687cc981b43aac1f29281 (patch) | |
tree | 6cf63e29aaebe4f60d1150fc73c46e7e9471d7b4 | |
parent | 01590005ba44f350f63b70a7ceb9f69095b293d5 (diff) | |
download | mariadb-git-d4aef382fd9e3cc10ed687cc981b43aac1f29281.tar.gz |
Fix compiler failure on fallocate function and used flags.
-rw-r--r-- | config.h.cmake | 2 | ||||
-rw-r--r-- | configure.cmake | 2 | ||||
-rw-r--r-- | storage/innobase/include/fil0pagecompress.h | 7 | ||||
-rw-r--r-- | storage/innobase/include/fsp0pagecompress.ic | 13 | ||||
-rw-r--r-- | storage/innobase/os/os0file.cc | 125 | ||||
-rw-r--r-- | storage/xtradb/include/fil0pagecompress.h | 7 | ||||
-rw-r--r-- | storage/xtradb/include/fsp0pagecompress.ic | 13 | ||||
-rw-r--r-- | storage/xtradb/os/os0file.cc | 128 |
8 files changed, 183 insertions, 114 deletions
diff --git a/config.h.cmake b/config.h.cmake index c575f13a62d..1c8e22a20e9 100644 --- a/config.h.cmake +++ b/config.h.cmake @@ -216,6 +216,8 @@ #cmakedefine HAVE_POLL 1 #cmakedefine HAVE_PORT_CREATE 1 #cmakedefine HAVE_POSIX_FALLOCATE 1 +#cmakedefine HAVE_LINUX_FALLOC_H 1 +#cmakedefine HAVE_FALLOCATE 1 #cmakedefine HAVE_PREAD 1 #cmakedefine HAVE_PAUSE_INSTRUCTION 1 #cmakedefine HAVE_FAKE_PAUSE_INSTRUCTION 1 diff --git a/configure.cmake b/configure.cmake index d5076dada02..5fb86acad70 100644 --- a/configure.cmake +++ b/configure.cmake @@ -199,6 +199,7 @@ CHECK_INCLUDE_FILES (ieeefp.h HAVE_IEEEFP_H) CHECK_INCLUDE_FILES (inttypes.h HAVE_INTTYPES_H) CHECK_INCLUDE_FILES (langinfo.h HAVE_LANGINFO_H) CHECK_INCLUDE_FILES (linux/unistd.h HAVE_LINUX_UNISTD_H) +CHECK_INCLUDE_FILES (linux/falloc.h HAVE_LINUX_FALLOC_H) CHECK_INCLUDE_FILES (limits.h HAVE_LIMITS_H) CHECK_INCLUDE_FILES (locale.h HAVE_LOCALE_H) CHECK_INCLUDE_FILES (malloc.h HAVE_MALLOC_H) @@ -399,6 +400,7 @@ CHECK_FUNCTION_EXISTS (perror HAVE_PERROR) CHECK_FUNCTION_EXISTS (poll HAVE_POLL) CHECK_FUNCTION_EXISTS (port_create HAVE_PORT_CREATE) CHECK_FUNCTION_EXISTS (posix_fallocate HAVE_POSIX_FALLOCATE) +CHECK_FUNCTION_EXISTS (fallocate HAVE_FALLOCATE) CHECK_FUNCTION_EXISTS (pread HAVE_PREAD) CHECK_FUNCTION_EXISTS (pthread_attr_create HAVE_PTHREAD_ATTR_CREATE) CHECK_FUNCTION_EXISTS (pthread_attr_getstacksize HAVE_PTHREAD_ATTR_GETSTACKSIZE) diff --git a/storage/innobase/include/fil0pagecompress.h b/storage/innobase/include/fil0pagecompress.h index fb97af87460..c797c221efc 100644 --- a/storage/innobase/include/fil0pagecompress.h +++ b/storage/innobase/include/fil0pagecompress.h @@ -135,4 +135,11 @@ fil_page_is_compressed( /*===================*/ byte *buf); /*!< in: page */ +/*******************************************************************//** +Find out wheather the page is page compressed with lzo method +@return true if page is page compressed with lzo method*/ +ibool +fil_page_is_lzo_compressed( +/*=======================*/ + byte *buf); /*!< in: page */ #endif diff --git a/storage/innobase/include/fsp0pagecompress.ic b/storage/innobase/include/fsp0pagecompress.ic index 1ba3b7835c9..3e59106b05d 100644 --- a/storage/innobase/include/fsp0pagecompress.ic +++ b/storage/innobase/include/fsp0pagecompress.ic @@ -182,3 +182,16 @@ fil_space_get_atomic_writes( return((atomic_writes_t)0); } + +/*******************************************************************//** +Find out wheather the page is page compressed with lzo method +@return true if page is page compressed with lzo method, false if not */ +UNIV_INLINE +ibool +fil_page_is_lzo_compressed( +/*=======================*/ + byte *buf) /*!< in: page */ +{ + return(mach_read_from_2(buf+FIL_PAGE_TYPE) == FIL_PAGE_PAGE_COMPRESSED && + mach_read_from_8(buf+FIL_PAGE_FILE_FLUSH_LSN) == PAGE_LZO_ALGORITHM); +} diff --git a/storage/innobase/os/os0file.cc b/storage/innobase/os/os0file.cc index 11c1e75fb73..d7cbd37b3cd 100644 --- a/storage/innobase/os/os0file.cc +++ b/storage/innobase/os/os0file.cc @@ -48,6 +48,7 @@ Created 10/21/1995 Heikki Tuuri #include "srv0mon.h" #include "srv0srv.h" #ifdef HAVE_POSIX_FALLOCATE +#include "unistd.h" #include "fcntl.h" #endif #ifndef UNIV_HOTBACKUP @@ -77,6 +78,19 @@ Created 10/21/1995 Heikki Tuuri #include <sys/statvfs.h> #endif +#if defined(UNIV_LINUX) && defined(HAVE_LINUX_FALLOC_H) +#include <linux/falloc.h> +#endif + +#if defined(HAVE_FALLOCATE) +#ifndef FALLOC_FL_KEEP_SIZE +#define FALLOC_FL_KEEP_SIZE 0x01 +#endif +#ifndef FALLOC_FL_PUNCH_HOLE +#define FALLOC_FL_PUNCH_HOLE 0x02 +#endif +#endif + #ifdef HAVE_LZO #include "lzo/lzo1x.h" #endif @@ -2916,7 +2930,7 @@ try_again: as file spaces and they do not have FIL_PAGE_TYPE field, thus we must use here information is the actual file space compressed. */ - if (compressed && fil_page_is_compressed((byte *)buf)) { + if (fil_page_is_compressed((byte *)buf)) { fil_decompress_page(NULL, (byte *)buf, len, NULL); } @@ -2936,7 +2950,7 @@ try_again: as file spaces and they do not have FIL_PAGE_TYPE field, thus we must use here information is the actual file space compressed. */ - if (compressed && fil_page_is_compressed((byte *)buf)) { + if (fil_page_is_compressed((byte *)buf)) { fil_decompress_page(NULL, (byte *)buf, n, NULL); } @@ -3061,7 +3075,7 @@ try_again: as file spaces and they do not have FIL_PAGE_TYPE field, thus we must use here information is the actual file space compressed. */ - if (compressed && fil_page_is_compressed((byte *)buf)) { + if (fil_page_is_compressed((byte *)buf)) { fil_decompress_page(NULL, (byte *)buf, n, NULL); } @@ -3081,7 +3095,7 @@ try_again: as file spaces and they do not have FIL_PAGE_TYPE field, thus we must use here information is the actual file space compressed. */ - if (compressed && fil_page_is_compressed((byte *)buf)) { + if (fil_page_is_compressed((byte *)buf)) { fil_decompress_page(NULL, (byte *)buf, n, NULL); } @@ -4634,12 +4648,10 @@ found: // We allocate memory for page compressed buffer if and only // if it is not yet allocated. - if (slot->page_buf == NULL) { - os_slot_alloc_page_buf(slot); - } + os_slot_alloc_page_buf(slot); #ifdef HAVE_LZO - if (innodb_compression_algorithm == 3 && slot->lzo_mem == NULL) { + if (innodb_compression_algorithm == 3) { os_slot_alloc_lzo_mem(slot); } #endif @@ -5305,6 +5317,7 @@ os_aio_windows_handle( case OS_FILE_WRITE: if (slot->message1 && slot->page_compression && + slot->page_compress_success && slot->page_buf) { ret = WriteFile(slot->file, slot->page_buf, (DWORD) slot->len, &len, @@ -5345,26 +5358,24 @@ os_aio_windows_handle( ret_val = ret && len == slot->len; } - if (slot->message1 && slot->page_compression) { - // We allocate memory for page compressed buffer if and only - // if it is not yet allocated. - if (slot->page_buf == NULL) { + if (slot->type == OS_FILE_READ) { + if(fil_page_is_compressed(slot->buf)) { os_slot_alloc_page_buf(slot); - } + #ifdef HAVE_LZO - if (innodb_compression_algorithm == 3 && slot->lzo_mem == NULL) { - os_slot_alloc_lzo_mem(slot); - } + if (fil_page_is_lzo_compressed(slot->buf)) { + os_slot_alloc_lzo_mem(slot); + } #endif - if (slot->type == OS_FILE_READ) { fil_decompress_page(slot->page_buf, slot->buf, slot->len, slot->write_size); - } else { - if (slot->page_compress_success && fil_page_is_compressed(slot->page_buf)) { - if (srv_use_trim && os_fallocate_failed == FALSE) { - // Deallocate unused blocks from file system - os_file_trim(slot); - } + } + } else { + /* OS_FILE_WRITE */ + if (slot->page_compress_success && fil_page_is_compressed(slot->page_buf)) { + if (srv_use_trim && os_fallocate_failed == FALSE) { + // Deallocate unused blocks from file system + os_file_trim(slot); } } } @@ -5458,32 +5469,30 @@ retry: /* We have not overstepped to next segment. */ ut_a(slot->pos < end_pos); - /* If the table is page compressed and this is read, - we decompress before we annouce the read is - complete. For writes, we free the compressed page. */ - if (slot->message1 && slot->page_compression) { - // We allocate memory for page compressed buffer if and only - // if it is not yet allocated. - if (slot->page_buf == NULL) { + if (slot->type == OS_FILE_READ) { + /* If the table is page compressed and this is read, + we decompress before we annouce the read is + complete. For writes, we free the compressed page. */ + if (fil_page_is_compressed(slot->buf)) { + // We allocate memory for page compressed buffer if and only + // if it is not yet allocated. os_slot_alloc_page_buf(slot); - } - #ifdef HAVE_LZO - if (innodb_compression_algorithm == 3 && slot->lzo_mem == NULL) { - os_slot_alloc_lzo_mem(slot); - } + if (fil_page_is_lzo_compressed(slot->buf)) { + os_slot_alloc_lzo_mem(slot); + } #endif - if (slot->type == OS_FILE_READ) { fil_decompress_page(slot->page_buf, slot->buf, slot->len, slot->write_size); - } else { - if (slot->page_compress_success && - fil_page_is_compressed(slot->page_buf)) { - ut_ad(slot->page_compression_page); - if (srv_use_trim && os_fallocate_failed == FALSE) { - // Deallocate unused blocks from file system - os_file_trim(slot); - } + } + } else { + /* OS_FILE_WRITE */ + if (slot->page_compress_success && + fil_page_is_compressed(slot->page_buf)) { + ut_ad(slot->page_compression_page); + if (srv_use_trim && os_fallocate_failed == FALSE) { + // Deallocate unused blocks from file system + os_file_trim(slot); } } } @@ -6397,7 +6406,7 @@ os_file_trim( } #ifdef __linux__ -#if defined(HAVE_POSIX_FALLOCATE) +#if defined(HAVE_FALLOCATE) int ret = fallocate(slot->file, FALLOC_FL_PUNCH_HOLE | FALLOC_FL_KEEP_SIZE, off, trim_len); if (ret) { @@ -6435,7 +6444,7 @@ os_file_trim( *slot->write_size = 0; } -#endif /* HAVE_POSIX_FALLOCATE ... */ +#endif /* HAVE_FALLOCATE ... */ #elif defined(_WIN32) FILE_LEVEL_TRIM flt; @@ -6518,13 +6527,15 @@ os_slot_alloc_page_buf( byte* cbuf; ut_a(slot != NULL); - /* We allocate extra to avoid memory overwrite on compression */ - cbuf2 = static_cast<byte *>(ut_malloc(UNIV_PAGE_SIZE*2)); - cbuf = static_cast<byte *>(ut_align(cbuf2, UNIV_PAGE_SIZE)); - slot->page_compression_page = static_cast<byte *>(cbuf2); - slot->page_buf = static_cast<byte *>(cbuf); - memset(slot->page_buf, 0, UNIV_PAGE_SIZE); - ut_a(slot->page_buf != NULL); + if (slot->page_compression_page == NULL) { + /* We allocate extra to avoid memory overwrite on compression */ + cbuf2 = static_cast<byte *>(ut_malloc(UNIV_PAGE_SIZE*2)); + cbuf = static_cast<byte *>(ut_align(cbuf2, UNIV_PAGE_SIZE)); + slot->page_compression_page = static_cast<byte *>(cbuf2); + slot->page_buf = static_cast<byte *>(cbuf); + memset(slot->page_compression_page, 0, UNIV_PAGE_SIZE*2); + ut_a(slot->page_buf != NULL); + } } #ifdef HAVE_LZO @@ -6538,9 +6549,11 @@ os_slot_alloc_lzo_mem( os_aio_slot_t* slot) /*!< in: slot structure */ { ut_a(slot != NULL); - slot->lzo_mem = static_cast<byte *>(ut_malloc(LZO1X_1_15_MEM_COMPRESS)); - memset(slot->lzo_mem, 0, LZO1X_1_15_MEM_COMPRESS); - ut_a(slot->lzo_mem != NULL); + if(slot->lzo_mem == NULL) { + slot->lzo_mem = static_cast<byte *>(ut_malloc(LZO1X_1_15_MEM_COMPRESS)); + memset(slot->lzo_mem, 0, LZO1X_1_15_MEM_COMPRESS); + ut_a(slot->lzo_mem != NULL); + } } #endif diff --git a/storage/xtradb/include/fil0pagecompress.h b/storage/xtradb/include/fil0pagecompress.h index fb97af87460..c797c221efc 100644 --- a/storage/xtradb/include/fil0pagecompress.h +++ b/storage/xtradb/include/fil0pagecompress.h @@ -135,4 +135,11 @@ fil_page_is_compressed( /*===================*/ byte *buf); /*!< in: page */ +/*******************************************************************//** +Find out wheather the page is page compressed with lzo method +@return true if page is page compressed with lzo method*/ +ibool +fil_page_is_lzo_compressed( +/*=======================*/ + byte *buf); /*!< in: page */ #endif diff --git a/storage/xtradb/include/fsp0pagecompress.ic b/storage/xtradb/include/fsp0pagecompress.ic index a2553eeb47b..4dde042e19e 100644 --- a/storage/xtradb/include/fsp0pagecompress.ic +++ b/storage/xtradb/include/fsp0pagecompress.ic @@ -182,3 +182,16 @@ fil_space_get_atomic_writes( return((atomic_writes_t)0); } + +/*******************************************************************//** +Find out wheather the page is page compressed with lzo method +@return true if page is page compressed with lzo method, false if not */ +UNIV_INLINE +ibool +fil_page_is_lzo_compressed( +/*=======================*/ + byte *buf) /*!< in: page */ +{ + return(mach_read_from_2(buf+FIL_PAGE_TYPE) == FIL_PAGE_PAGE_COMPRESSED && + mach_read_from_8(buf+FIL_PAGE_FILE_FLUSH_LSN) == PAGE_LZO_ALGORITHM); +} diff --git a/storage/xtradb/os/os0file.cc b/storage/xtradb/os/os0file.cc index 48d7cbf274a..2d70a76ea07 100644 --- a/storage/xtradb/os/os0file.cc +++ b/storage/xtradb/os/os0file.cc @@ -50,6 +50,7 @@ Created 10/21/1995 Heikki Tuuri #include "srv0mon.h" #include "srv0srv.h" #ifdef HAVE_POSIX_FALLOCATE +#include "unistd.h" #include "fcntl.h" #endif #ifndef UNIV_HOTBACKUP @@ -83,6 +84,19 @@ Created 10/21/1995 Heikki Tuuri #include <sys/statvfs.h> #endif +#if defined(UNIV_LINUX) && defined(HAVE_LINUX_FALLOC_H) +#include <linux/falloc.h> +#endif + +#if defined(HAVE_FALLOCATE) +#ifndef FALLOC_FL_KEEP_SIZE +#define FALLOC_FL_KEEP_SIZE 0x01 +#endif +#ifndef FALLOC_FL_PUNCH_HOLE +#define FALLOC_FL_PUNCH_HOLE 0x02 +#endif +#endif + #ifdef HAVE_LZO #include "lzo/lzo1x.h" #endif @@ -3112,7 +3126,7 @@ try_again: as file spaces and they do not have FIL_PAGE_TYPE field, thus we must use here information is the actual file space compressed. */ - if (compressed && fil_page_is_compressed((byte *)buf)) { + if (fil_page_is_compressed((byte *)buf)) { fil_decompress_page(NULL, (byte *)buf, len, NULL); } @@ -3133,7 +3147,7 @@ try_again: as file spaces and they do not have FIL_PAGE_TYPE field, thus we must use here information is the actual file space compressed. */ - if (compressed && fil_page_is_compressed((byte *)buf)) { + if (fil_page_is_compressed((byte *)buf)) { fil_decompress_page(NULL, (byte *)buf, n, NULL); } @@ -3231,7 +3245,7 @@ try_again: as file spaces and they do not have FIL_PAGE_TYPE field, thus we must use here information is the actual file space compressed. */ - if (compressed && fil_page_is_compressed((byte *)buf)) { + if (fil_page_is_compressed((byte *)buf)) { fil_decompress_page(NULL, (byte *)buf, n, NULL); } @@ -3252,7 +3266,7 @@ try_again: as file spaces and they do not have FIL_PAGE_TYPE field, thus we must use here information is the actual file space compressed. */ - if (compressed && fil_page_is_compressed((byte *)buf)) { + if (fil_page_is_compressed((byte *)buf)) { fil_decompress_page(NULL, (byte *)buf, n, NULL); } @@ -4753,12 +4767,10 @@ found: // We allocate memory for page compressed buffer if and only // if it is not yet allocated. - if (slot->page_buf == NULL) { - os_slot_alloc_page_buf(slot); - } + os_slot_alloc_page_buf(slot); #ifdef HAVE_LZO - if (innodb_compression_algorithm == 3 && slot->lzo_mem == NULL) { + if (innodb_compression_algorithm == 3) { os_slot_alloc_lzo_mem(slot); } #endif @@ -4786,7 +4798,6 @@ found: /* Take array mutex back */ os_mutex_enter(array->mutex); - } #ifdef WIN_ASYNC_IO @@ -5176,9 +5187,11 @@ try_again: trx->io_reads++; trx->io_read += n; } + slot = os_aio_array_reserve_slot(type, array, message1, message2, file, name, buf, offset, n, space_id, page_compression, page_compression_level, write_size); + if (type == OS_FILE_READ) { if (srv_use_native_aio) { os_n_file_reads++; @@ -5364,7 +5377,7 @@ os_aio_windows_handle( switch (slot->type) { case OS_FILE_WRITE: - if (slot->message1 && slot->page_compression && slot->page_buf) { + if (slot->message1 && slot->page_compression slot->page_compress_success && slot->page_buf) { ret_val = os_file_write(slot->name, slot->file, slot->page_buf, slot->offset, slot->len); } else { @@ -5400,26 +5413,23 @@ os_aio_windows_handle( ret_val = ret && len == slot->len; } - if (slot->message1 && slot->page_compression) { - // We allocate memory for page compressed buffer if and only - // if it is not yet allocated. - if (slot->page_buf == NULL) { + if (slot->type == OS_FILE_READ) { + if (fil_page_is_compressed(slot->buf)) { os_slot_alloc_page_buf(slot); - } #ifdef HAVE_LZO - if (innodb_compression_algorithm == 3 && slot->lzo_mem == NULL) { - os_slot_alloc_lzo_mem(slot); - } + if (fil_page_is_lzo_compressed(slot->buf)) { + os_slot_alloc_lzo_mem(slot); + } #endif - if (slot->type == OS_FILE_READ) { fil_decompress_page(slot->page_buf, slot->buf, slot->len, slot->write_size); - } else { - if (slot->page_compress_success && fil_page_is_compressed(slot->page_buf)) { - if (srv_use_trim && os_fallocate_failed == FALSE) { - // Deallocate unused blocks from file system - os_file_trim(slot); - } + } + } else { + /* OS_FILE_WRITE */ + if (slot->page_compress_success && fil_page_is_compressed(slot->page_buf)) { + if (srv_use_trim && os_fallocate_failed == FALSE) { + // Deallocate unused blocks from file system + os_file_trim(slot); } } } @@ -5513,31 +5523,29 @@ retry: /* We have not overstepped to next segment. */ ut_a(slot->pos < end_pos); - /* If the table is page compressed and this is read, - we decompress before we annouce the read is - complete. For writes, we free the compressed page. */ - if (slot->message1 && slot->page_compression) { - // We allocate memory for page compressed buffer if and only - // if it is not yet allocated. - if (slot->page_buf == NULL) { + if (slot->type == OS_FILE_READ) { + /* If the table is page compressed and this is read, + we decompress before we annouce the read is + complete. For writes, we free the compressed page. */ + if (fil_page_is_compressed(slot->buf)) { + // We allocate memory for page compressed buffer if and only + // if it is not yet allocated. os_slot_alloc_page_buf(slot); - } - #ifdef HAVE_LZO - if (innodb_compression_algorithm == 3 && slot->lzo_mem == NULL) { - os_slot_alloc_lzo_mem(slot); - } + if (fil_page_is_lzo_compressed(slot->buf)) { + os_slot_alloc_lzo_mem(slot); + } #endif - if (slot->type == OS_FILE_READ) { fil_decompress_page(slot->page_buf, slot->buf, slot->len, slot->write_size); - } else { - if (slot->page_compress_success && - fil_page_is_compressed(slot->page_buf)) { - ut_ad(slot->page_compression_page); - if (srv_use_trim && os_fallocate_failed == FALSE) { - // Deallocate unused blocks from file system - os_file_trim(slot); - } + } + } else { + /* OS_FILE_WRITE */ + if (slot->page_compress_success && + fil_page_is_compressed(slot->page_buf)) { + ut_ad(slot->page_compression_page); + if (srv_use_trim && os_fallocate_failed == FALSE) { + // Deallocate unused blocks from file system + os_file_trim(slot); } } } @@ -6490,7 +6498,7 @@ os_file_trim( } #ifdef __linux__ -#if defined(POSIX_FALLOCATE) +#if defined(HAVE_FALLOCATE) int ret = fallocate(slot->file, FALLOC_FL_PUNCH_HOLE | FALLOC_FL_KEEP_SIZE, off, trim_len); if (ret) { @@ -6528,7 +6536,7 @@ os_file_trim( *slot->write_size = 0; } -#endif /* HAVE_POSIX_FALLOCATE ... */ +#endif /* HAVE_FALLOCATE ... */ #elif defined(_WIN32) FILE_LEVEL_TRIM flt; @@ -6610,13 +6618,15 @@ os_slot_alloc_page_buf( byte* cbuf; ut_a(slot != NULL); - /* We allocate extra to avoid memory overwrite on compression */ - cbuf2 = static_cast<byte *>(ut_malloc(UNIV_PAGE_SIZE*2)); - cbuf = static_cast<byte *>(ut_align(cbuf2, UNIV_PAGE_SIZE)); - slot->page_compression_page = static_cast<byte *>(cbuf2); - slot->page_buf = static_cast<byte *>(cbuf); - memset(slot->page_buf, 0, UNIV_PAGE_SIZE); - ut_a(slot->page_buf != NULL); + if (slot->page_compression_page == NULL) { + /* We allocate extra to avoid memory overwrite on compression */ + cbuf2 = static_cast<byte *>(ut_malloc(UNIV_PAGE_SIZE*2)); + cbuf = static_cast<byte *>(ut_align(cbuf2, UNIV_PAGE_SIZE)); + slot->page_compression_page = static_cast<byte *>(cbuf2); + slot->page_buf = static_cast<byte *>(cbuf); + memset(slot->page_compression_page, 0, UNIV_PAGE_SIZE*2); + ut_a(slot->page_buf != NULL); + } } #ifdef HAVE_LZO @@ -6630,9 +6640,11 @@ os_slot_alloc_lzo_mem( os_aio_slot_t* slot) /*!< in: slot structure */ { ut_a(slot != NULL); - slot->lzo_mem = static_cast<byte *>(ut_malloc(LZO1X_1_15_MEM_COMPRESS)); - memset(slot->lzo_mem, 0, LZO1X_1_15_MEM_COMPRESS); - ut_a(slot->lzo_mem != NULL); + if(slot->lzo_mem == NULL) { + slot->lzo_mem = static_cast<byte *>(ut_malloc(LZO1X_1_15_MEM_COMPRESS)); + memset(slot->lzo_mem, 0, LZO1X_1_15_MEM_COMPRESS); + ut_a(slot->lzo_mem != NULL); + } } #endif |