From 7ff256d3c2f19aab03846ad3c6382550b21a835a Mon Sep 17 00:00:00 2001 From: unknown Date: Mon, 6 Sep 2010 13:42:12 +0200 Subject: [PATCH] Fix compile failures and warnings on Windows from XtraDB "shm buffer pool" patch. (It is not legal C to do pointer arithmetics on void *). --- storage/xtradb/buf/buf0buddy.c | 6 ++- storage/xtradb/buf/buf0buf.c | 60 +++++++++++++++--------------- storage/xtradb/ha/hash0hash.c | 4 +- storage/xtradb/include/buf0buf.h | 2 +- storage/xtradb/include/hash0hash.h | 8 ++-- storage/xtradb/include/ut0lst.h | 8 ++-- storage/xtradb/os/os0proc.c | 2 + 7 files changed, 47 insertions(+), 43 deletions(-) diff --git a/storage/xtradb/buf/buf0buddy.c b/storage/xtradb/buf/buf0buddy.c index 8ce2d1888ef..e6b80bcda55 100644 --- a/storage/xtradb/buf/buf0buddy.c +++ b/storage/xtradb/buf/buf0buddy.c @@ -452,6 +452,8 @@ buf_buddy_relocate( buf_page_t* bpage; const ulint size = BUF_BUDDY_LOW << i; ullint usec = ut_time_us(NULL); + ulint space; + ulint page_no; //ut_ad(buf_pool_mutex_own()); ut_ad(mutex_own(&zip_free_mutex)); @@ -490,9 +492,9 @@ buf_buddy_relocate( pool), so there is nothing wrong about this. The mach_read_from_4() calls here will only trigger bogus Valgrind memcheck warnings in UNIV_DEBUG_VALGRIND builds. */ - ulint space = mach_read_from_4( + space = mach_read_from_4( (const byte*) src + FIL_PAGE_ARCH_LOG_NO_OR_SPACE_ID); - ulint page_no = mach_read_from_4( + page_no = mach_read_from_4( (const byte*) src + FIL_PAGE_OFFSET); /* Suppress Valgrind warnings about conditional jump on uninitialized value. */ diff --git a/storage/xtradb/buf/buf0buf.c b/storage/xtradb/buf/buf0buf.c index 595addb24a1..abd5f5b15ed 100644 --- a/storage/xtradb/buf/buf0buf.c +++ b/storage/xtradb/buf/buf0buf.c @@ -792,7 +792,7 @@ buf_block_reuse( ptrdiff_t frame_offset) { /* block_init */ - block->frame = ((void*)(block->frame) + frame_offset); + block->frame = ((char*)(block->frame) + frame_offset); UNIV_MEM_DESC(block->frame, UNIV_PAGE_SIZE, block); @@ -809,7 +809,7 @@ buf_block_reuse( #endif /* UNIV_AHI_DEBUG || UNIV_DEBUG */ if (block->page.zip.data) - block->page.zip.data = ((void*)(block->page.zip.data) + frame_offset); + block->page.zip.data = ((char*)(block->page.zip.data) + frame_offset); block->is_hashed = FALSE; @@ -876,17 +876,17 @@ buf_chunk_init( "InnoDB: You should ensure no change of InnoDB files while using innodb_buffer_pool_shm_key.\n"); /* FIXME: This is vague id still */ - binary_id = (ulint) ((void*)mtr_commit - (void*)btr_root_get) - + (ulint) ((void*)os_get_os_version - (void*)buf_calc_page_new_checksum) - + (ulint) ((void*)page_dir_find_owner_slot - (void*)dfield_data_is_binary_equal) - + (ulint) ((void*)que_graph_publish - (void*)dict_casedn_str) - + (ulint) ((void*)read_view_oldest_copy_or_open_new - (void*)fil_space_get_version) - + (ulint) ((void*)rec_get_n_extern_new - (void*)fsp_get_size_low) - + (ulint) ((void*)row_get_trx_id_offset - (void*)ha_create_func) - + (ulint) ((void*)srv_set_io_thread_op_info - (void*)thd_is_replication_slave_thread) - + (ulint) ((void*)mutex_create_func - (void*)ibuf_inside) - + (ulint) ((void*)trx_set_detailed_error - (void*)lock_check_trx_id_sanity) - + (ulint) ((void*)ut_time - (void*)mem_heap_strdup); + binary_id = (ulint) ((char*)mtr_commit - (char *)btr_root_get) + + (ulint) ((char *)os_get_os_version - (char *)buf_calc_page_new_checksum) + + (ulint) ((char *)page_dir_find_owner_slot - (char *)dfield_data_is_binary_equal) + + (ulint) ((char *)que_graph_publish - (char *)dict_casedn_str) + + (ulint) ((char *)read_view_oldest_copy_or_open_new - (char *)fil_space_get_version) + + (ulint) ((char *)rec_get_n_extern_new - (char *)fsp_get_size_low) + + (ulint) ((char *)row_get_trx_id_offset - (char *)ha_create_func) + + (ulint) ((char *)srv_set_io_thread_op_info - (char *)thd_is_replication_slave_thread) + + (ulint) ((char *)mutex_create_func - (char *)ibuf_inside) + + (ulint) ((char *)trx_set_detailed_error - (char *)lock_check_trx_id_sanity) + + (ulint) ((char *)ut_time - (char *)mem_heap_strdup); chunk->mem = os_shm_alloc(&chunk->mem_size, srv_buffer_pool_shm_key, &is_new); @@ -902,7 +902,7 @@ buf_chunk_init( shm_info = chunk->mem; - zip_hash_tmp = (hash_table_t*)((void*)chunk->mem + chunk->mem_size - zip_hash_mem_size); + zip_hash_tmp = (hash_table_t*)((char *)chunk->mem + chunk->mem_size - zip_hash_mem_size); if (is_new) { strncpy(shm_info->head_str, BUF_SHM_INFO_HEAD, 8); @@ -959,7 +959,7 @@ buf_chunk_init( ut_a(shm_info->zip_hash_n == zip_hash_n); /* check checksum */ - checksum = ut_fold_binary(chunk->mem + sizeof(buf_shm_info_t), + checksum = ut_fold_binary((byte*)chunk->mem + sizeof(buf_shm_info_t), chunk->mem_size - sizeof(buf_shm_info_t)); if (shm_info->checksum != checksum) { fprintf(stderr, @@ -992,7 +992,7 @@ buf_chunk_init( /* Allocate the block descriptors from the start of the memory block. */ if (srv_buffer_pool_shm_key) { - chunk->blocks = chunk->mem + sizeof(buf_shm_info_t); + chunk->blocks = (buf_block_t*)((char*)chunk->mem + sizeof(buf_shm_info_t)); } else { chunk->blocks = chunk->mem; } @@ -1028,7 +1028,7 @@ buf_chunk_init( ptrdiff_t phys_offset; ptrdiff_t logi_offset; ptrdiff_t blocks_offset; - void* previous_frame_address; + byte* previous_frame_address; if (chunk->size < shm_info->chunk_backup.size) { fprintf(stderr, @@ -1039,10 +1039,10 @@ buf_chunk_init( } chunk->size = shm_info->chunk_backup.size; - phys_offset = (void*)frame - (void*)((void*)chunk->mem + shm_info->frame_offset); - logi_offset = (void*)frame - (void*)chunk->blocks[0].frame; + phys_offset = (char*)frame - ((char*)chunk->mem + shm_info->frame_offset); + logi_offset = (char *)frame - (char *)chunk->blocks[0].frame; previous_frame_address = chunk->blocks[0].frame; - blocks_offset = (void*)chunk->blocks - (void*)shm_info->chunk_backup.blocks; + blocks_offset = (char *)chunk->blocks - (char *)shm_info->chunk_backup.blocks; if (phys_offset || logi_offset || blocks_offset) { fprintf(stderr, @@ -1053,8 +1053,8 @@ buf_chunk_init( "InnoDB: Pysical offset : %ld (%#lx)\n" "InnoDB: Logical offset (frames) : %ld (%#lx)\n" "InnoDB: Logical offset (blocks) : %ld (%#lx)\n", - (void*)((void*)chunk->mem + shm_info->frame_offset), - (void*)chunk->blocks[0].frame, (void*)frame, + (char *)chunk->mem + shm_info->frame_offset, + chunk->blocks[0].frame, frame, (ulong) phys_offset, (ulong) phys_offset, (ulong) logi_offset, (ulong) logi_offset, (ulong) blocks_offset, (ulong) blocks_offset); } else { @@ -1066,7 +1066,7 @@ buf_chunk_init( fprintf(stderr, "InnoDB: Aligning physical offset..."); - memmove((void*)frame, (void*)((void*)chunk->mem + shm_info->frame_offset), + memmove(frame, ((char*)chunk->mem + shm_info->frame_offset), chunk->size * UNIV_PAGE_SIZE); fprintf(stderr, @@ -1094,8 +1094,8 @@ buf_chunk_init( previous_frame_address, logi_offset, blocks_offset); if (shm_info->buf_pool_backup.LRU_old) shm_info->buf_pool_backup.LRU_old = - ((void*)(shm_info->buf_pool_backup.LRU_old) - + (((void*)shm_info->buf_pool_backup.LRU_old > previous_frame_address) + (buf_page_t*)((char*)(shm_info->buf_pool_backup.LRU_old) + + (((byte*)shm_info->buf_pool_backup.LRU_old > previous_frame_address) ? logi_offset : blocks_offset)); UT_LIST_OFFSET(unzip_LRU, buf_block_t, shm_info->buf_pool_backup.unzip_LRU, @@ -1141,7 +1141,7 @@ buf_chunk_init( } if (shm_info) { - shm_info->frame_offset = (void*)chunk->blocks[0].frame - (void*)chunk->mem; + shm_info->frame_offset = (char*)chunk->blocks[0].frame - (char*)chunk->mem; } return(chunk); @@ -1396,10 +1396,10 @@ buf_pool_init(void) if (srv_buffer_pool_shm_key) { buf_shm_info_t* shm_info; - ut_a(chunk->blocks == chunk->mem + sizeof(buf_shm_info_t)); + ut_a((char*)chunk->blocks == (char*)chunk->mem + sizeof(buf_shm_info_t)); shm_info = chunk->mem; - buf_pool->zip_hash = (hash_table_t*)((void*)chunk->mem + shm_info->zip_hash_offset); + buf_pool->zip_hash = (hash_table_t*)((char*)chunk->mem + shm_info->zip_hash_offset); if(shm_info->is_new) { shm_info->is_new = FALSE; /* initialization was finished */ @@ -1504,7 +1504,7 @@ buf_pool_free(void) chunk = buf_pool->chunks; shm_info = chunk->mem; - ut_a(chunk->blocks == chunk->mem + sizeof(buf_shm_info_t)); + ut_a((char*)chunk->blocks == (char*)chunk->mem + sizeof(buf_shm_info_t)); /* validation the shared memory segment doesn't have unrecoverable contents. */ /* Currently, validation became not needed */ @@ -1514,7 +1514,7 @@ buf_pool_free(void) memcpy(&(shm_info->chunk_backup), chunk, sizeof(buf_chunk_t)); if (srv_fast_shutdown < 2) { - shm_info->checksum = ut_fold_binary(chunk->mem + sizeof(buf_shm_info_t), + shm_info->checksum = ut_fold_binary((byte*)chunk->mem + sizeof(buf_shm_info_t), chunk->mem_size - sizeof(buf_shm_info_t)); shm_info->clean = TRUE; } diff --git a/storage/xtradb/ha/hash0hash.c b/storage/xtradb/ha/hash0hash.c index bc058cd4729..70516deb005 100644 --- a/storage/xtradb/ha/hash0hash.c +++ b/storage/xtradb/ha/hash0hash.c @@ -161,7 +161,7 @@ hash_create_init( offset = (sizeof(hash_table_t) + 7) / 8; offset *= 8; - table->array = (hash_cell_t*)(((void*)table) + offset); + table->array = (hash_cell_t*)(((char*)table) + offset); table->n_cells = prime; # if defined UNIV_AHI_DEBUG || defined UNIV_DEBUG table->adaptive = FALSE; @@ -187,7 +187,7 @@ hash_create_reuse( offset = (sizeof(hash_table_t) + 7) / 8; offset *= 8; - table->array = (hash_cell_t*)(((void*)table) + offset); + table->array = (hash_cell_t*)(((char*)table) + offset); ut_ad(table->magic_n == HASH_TABLE_MAGIC_N); } diff --git a/storage/xtradb/include/buf0buf.h b/storage/xtradb/include/buf0buf.h index 9484146d8a3..a7854e3038d 100644 --- a/storage/xtradb/include/buf0buf.h +++ b/storage/xtradb/include/buf0buf.h @@ -1305,7 +1305,7 @@ Compute the hash fold value for blocks in buf_pool->zip_hash. */ /* the fold should be relative when srv_buffer_pool_shm_key is enabled */ #define BUF_POOL_ZIP_FOLD_PTR(ptr) (!srv_buffer_pool_shm_key\ ?((ulint) (ptr) / UNIV_PAGE_SIZE)\ - :((ulint) ((void*)ptr - (void*)(buf_pool->chunks->blocks->frame)) / UNIV_PAGE_SIZE)) + :((ulint) ((char*)ptr - (char*)(buf_pool->chunks->blocks->frame)) / UNIV_PAGE_SIZE)) #define BUF_POOL_ZIP_FOLD(b) BUF_POOL_ZIP_FOLD_PTR((b)->frame) #define BUF_POOL_ZIP_FOLD_BPAGE(b) BUF_POOL_ZIP_FOLD((buf_block_t*) (b)) /* @} */ diff --git a/storage/xtradb/include/hash0hash.h b/storage/xtradb/include/hash0hash.h index 9cb410e2ad7..9dc20cc057f 100644 --- a/storage/xtradb/include/hash0hash.h +++ b/storage/xtradb/include/hash0hash.h @@ -363,14 +363,14 @@ do {\ NODE_TYPE* node2222;\ \ if ((TABLE)->array[i2222].node) \ - (TABLE)->array[i2222].node \ - += (((TABLE)->array[i2222].node > (void*)FADDR)?FOFFSET:BOFFSET);\ + (TABLE)->array[i2222].node = (void*)((char*)(TABLE)->array[i2222].node \ + + (((TABLE)->array[i2222].node > (void*)FADDR)?FOFFSET:BOFFSET));\ node2222 = HASH_GET_FIRST((TABLE), i2222);\ \ while (node2222) {\ if (node2222->PTR_NAME) \ - node2222->PTR_NAME = ((void*)node2222->PTR_NAME) \ - + ((((void*)node2222->PTR_NAME) > (void*)FADDR)?FOFFSET:BOFFSET);\ + node2222->PTR_NAME = (void*)((char*)node2222->PTR_NAME \ + + ((((void*)node2222->PTR_NAME) > (void*)FADDR)?FOFFSET:BOFFSET));\ \ node2222 = node2222->PTR_NAME;\ }\ diff --git a/storage/xtradb/include/ut0lst.h b/storage/xtradb/include/ut0lst.h index 69809f22d36..4305f6571b5 100644 --- a/storage/xtradb/include/ut0lst.h +++ b/storage/xtradb/include/ut0lst.h @@ -269,10 +269,10 @@ do { \ TYPE* ut_list_node_313; \ \ if ((BASE).start) \ - (BASE).start = ((void*)((BASE).start) \ + (BASE).start = (void*)((char*)((BASE).start) \ + (((void*)((BASE).start) > (void*)FADDR)?FOFFSET:BOFFSET));\ if ((BASE).end) \ - (BASE).end = ((void*)((BASE).end) \ + (BASE).end = (void*)((char*)((BASE).end) \ + (((void*)((BASE).end) > (void*)FADDR)?FOFFSET:BOFFSET));\ \ ut_list_node_313 = (BASE).start; \ @@ -280,10 +280,10 @@ do { \ for (ut_list_i_313 = (BASE).count; ut_list_i_313--; ) { \ ut_a(ut_list_node_313); \ if ((ut_list_node_313->NAME).prev) \ - (ut_list_node_313->NAME).prev = ((void*)((ut_list_node_313->NAME).prev)\ + (ut_list_node_313->NAME).prev = (void*)((char*)((ut_list_node_313->NAME).prev) \ + (((void*)((ut_list_node_313->NAME).prev) > (void*)FADDR)?FOFFSET:BOFFSET));\ if ((ut_list_node_313->NAME).next) \ - (ut_list_node_313->NAME).next = ((void*)((ut_list_node_313->NAME).next)\ + (ut_list_node_313->NAME).next = (void *)((char*)((ut_list_node_313->NAME).next) \ + (((void*)((ut_list_node_313->NAME).next)> (void*)FADDR)?FOFFSET:BOFFSET));\ ut_list_node_313 = (ut_list_node_313->NAME).next; \ } \ diff --git a/storage/xtradb/os/os0proc.c b/storage/xtradb/os/os0proc.c index 8f6c7f430f7..c101db3d179 100644 --- a/storage/xtradb/os/os0proc.c +++ b/storage/xtradb/os/os0proc.c @@ -243,8 +243,10 @@ os_shm_alloc( ibool* is_new) { void* ptr; +#if defined HAVE_SYS_IPC_H && HAVE_SYS_SHM_H ulint size; int shmid; +#endif *is_new = FALSE; #if defined HAVE_SYS_IPC_H && HAVE_SYS_SHM_H