diff --git a/innobase/configure.in b/innobase/configure.in index 29309a2c0a5..9d57a0f2d91 100644 --- a/innobase/configure.in +++ b/innobase/configure.in @@ -37,6 +37,7 @@ AC_PROG_INSTALL AC_CHECK_HEADERS(aio.h sched.h) AC_CHECK_SIZEOF(int, 4) AC_CHECK_SIZEOF(long, 4) +AC_CHECK_SIZEOF(void*, 4) AC_CHECK_FUNCS(sched_yield) AC_CHECK_FUNCS(fdatasync) #AC_CHECK_FUNCS(localtime_r) # Already checked by MySQL diff --git a/innobase/include/univ.i b/innobase/include/univ.i index 346b3b3d09f..cd471a89607 100644 --- a/innobase/include/univ.i +++ b/innobase/include/univ.i @@ -67,16 +67,6 @@ Microsoft Visual C++ */ #endif /* #if (defined(WIN32) || ... */ -#ifdef NOT_USED -/* On the 64-bit Windows we replace printf with ut_printf, etc. so that -we can use the %lu format string to print a 64-bit ulint */ -#if defined(__WIN__) && (defined(WIN64) || defined(_WIN64)) -#define printf ut_printf -#define sprintf ut_sprintf -#define fprintf ut_fprintf -#endif -#endif - /* DEBUG VERSION CONTROL ===================== */ @@ -185,27 +175,37 @@ management to ensure correct alignment for doubles etc. */ */ /* Note that inside MySQL 'byte' is defined as char on Linux! */ -#define byte unsigned char +#define byte unsigned char -/* Another basic type we use is unsigned long integer which is intended to be -equal to the word size of the machine. */ +/* Another basic type we use is unsigned long integer which should be equal to +the word size of the machine, that is on a 32-bit platform 32 bits, and on a +64-bit platform 64 bits. We also give the printf format for the type as a +macro PRULINT. */ #ifdef _WIN64 typedef unsigned __int64 ulint; +#define ULINTPF "%I64u" +typedef __int64 lint; #else typedef unsigned long int ulint; +#define ULINTPF "%lu" +typedef long int lint; #endif -typedef long int lint; - #ifdef __WIN__ -typedef __int64 ib_longlong; +typedef __int64 ib_longlong; #else -typedef longlong ib_longlong; +typedef longlong ib_longlong; +#endif + +#ifndef __WIN__ +#if SIZEOF_LONG != SIZEOF_VOIDP +#error "Error: InnoDB's ulint must be of the same size as void*" +#endif #endif /* The following type should be at least a 64-bit floating point number */ -typedef double utfloat; +typedef double utfloat; /* The 'undefined' value for a ulint */ #define ULINT_UNDEFINED ((ulint)(-1)) @@ -218,7 +218,7 @@ typedef double utfloat; /* This 'ibool' type is used within Innobase. Remember that different included headers may define 'bool' differently. Do not assume that 'bool' is a ulint! */ -#define ibool ulint +#define ibool ulint #ifndef TRUE diff --git a/innobase/srv/srv0srv.c b/innobase/srv/srv0srv.c index 2c1cb07c703..027d7c8fb6e 100644 --- a/innobase/srv/srv0srv.c +++ b/innobase/srv/srv0srv.c @@ -2447,20 +2447,22 @@ srv_sprintf_innodb_monitor( "BUFFER POOL AND MEMORY\n" "----------------------\n"); buf += sprintf(buf, - "Total memory allocated %lu; in additional pool allocated %lu\n", - (ulong) ut_total_allocated_memory, - (ulong) mem_pool_get_reserved(mem_comm_pool)); + "Total memory allocated " ULINTPF + "; in additional pool allocated" ULINTPF "\n", + ut_total_allocated_memory, + mem_pool_get_reserved(mem_comm_pool)); if (mem_out_of_mem_err_msg_count > 0) { buf += sprintf(buf, - "Mem allocation has spilled out of additional mem pool %lu times\n", - (ulong) mem_out_of_mem_err_msg_count); + "Mem allocation has spilled out of additional mem pool" ULINTPF + "times\n", + mem_out_of_mem_err_msg_count); } if (srv_use_awe) { buf += sprintf(buf, "In addition to that %lu MB of AWE memory allocated\n", - (ulong) (srv_pool_size / ((1024 * 1024) / UNIV_PAGE_SIZE))); + (ulong) (srv_pool_size / ((1024 * 1024) / UNIV_PAGE_SIZE))); } buf_print_io(buf, buf_end); @@ -2472,7 +2474,7 @@ srv_sprintf_innodb_monitor( "--------------\n"); buf += sprintf(buf, "%ld queries inside InnoDB, %lu queries in queue\n", - (ulong) srv_conc_n_threads, + (long) srv_conc_n_threads, (ulong) srv_conc_n_waiting_threads); n_reserved = fil_space_get_n_reserved_extents(0); @@ -2495,11 +2497,12 @@ srv_sprintf_innodb_monitor( srv_main_thread_op_info); #endif buf += sprintf(buf, - "Number of rows inserted %lu, updated %lu, deleted %lu, read %lu\n", - (ulong) srv_n_rows_inserted, - (ulong) srv_n_rows_updated, - (ulong) srv_n_rows_deleted, - (ulong) srv_n_rows_read); + "Number of rows inserted " ULINTPF + ", updated " ULINTPF ", deleted " ULINTPF ", read " ULINTPF "\n", + srv_n_rows_inserted, + srv_n_rows_updated, + srv_n_rows_deleted, + srv_n_rows_read); buf += sprintf(buf, "%.2f inserts/s, %.2f updates/s, %.2f deletes/s, %.2f reads/s\n", (srv_n_rows_inserted - srv_n_rows_inserted_old) diff --git a/innobase/srv/srv0start.c b/innobase/srv/srv0start.c index a2d4d2ba9b8..5fe66f515bc 100644 --- a/innobase/srv/srv0start.c +++ b/innobase/srv/srv0start.c @@ -57,7 +57,6 @@ Created 2/16/1996 Heikki Tuuri #include "srv0start.h" #include "que0que.h" - /* Log sequence number immediately after startup */ dulint srv_start_lsn; /* Log sequence number at shutdown */ @@ -1010,6 +1009,14 @@ innobase_start_or_create_for_mysql(void) ibool srv_file_per_table_original_value = srv_file_per_table; mtr_t mtr; + if (sizeof(ulint) != sizeof(void*)) { + fprintf(stderr, +"InnoDB: Error: size of InnoDB's ulint is %lu, but size of void* is %lu.\n" +"InnoDB: The sizes should be the same so that on a 64-bit platform you can\n" +"InnoDB: allocate more than 4 GB of memory.", + (ulong)sizeof(ulint), (ulong)sizeof(void*)); + } + srv_file_per_table = FALSE; /* system tables are created in tablespace 0 */ #ifdef UNIV_DEBUG