diff --git a/myisam/mi_packrec.c b/myisam/mi_packrec.c index e242e9d506d943459024fe4ec04943dfc6f805e7..41ab71204c446ddfd286487e4a70ca0b895a0a59 100644 --- a/myisam/mi_packrec.c +++ b/myisam/mi_packrec.c @@ -1189,24 +1189,30 @@ my_bool _mi_memmap_file(MI_INFO *info) MYISAM_SHARE *share=info->s; DBUG_ENTER("mi_memmap_file"); - if (!info->s->file_map) + if (!share->file_map) { + my_off_t data_file_length= share->state.state.data_file_length; + if (data_file_length > (my_off_t) (~((size_t) 0)) - MEMMAP_EXTRA_MARGIN) + { + DBUG_PRINT("warning", ("File is too large for mmap")); + DBUG_RETURN(0); + } if (my_seek(info->dfile,0L,MY_SEEK_END,MYF(0)) < - share->state.state.data_file_length+MEMMAP_EXTRA_MARGIN) + data_file_length + MEMMAP_EXTRA_MARGIN) { DBUG_PRINT("warning",("File isn't extended for memmap")); DBUG_RETURN(0); } file_map=(byte*) - my_mmap(0,(size_t)(share->state.state.data_file_length+MEMMAP_EXTRA_MARGIN),PROT_READ, - MAP_SHARED | MAP_NORESERVE,info->dfile,0L); + my_mmap(0, (size_t) (data_file_length + MEMMAP_EXTRA_MARGIN), PROT_READ, + MAP_SHARED | MAP_NORESERVE, info->dfile, 0L); if (file_map == (byte*) MAP_FAILED) { DBUG_PRINT("warning",("mmap failed: errno: %d",errno)); my_errno=errno; DBUG_RETURN(0); } - info->s->file_map=file_map; + share->file_map= file_map; } info->opt_flag|= MEMMAP_USED; info->read_record=share->read_record=_mi_read_mempack_record; diff --git a/sql/mysqld.cc b/sql/mysqld.cc index 2c6a4a31c4855bc4e432341ae212135f73071ff6..6440beefd852de291cf4f493367580c1cac74c3d 100644 --- a/sql/mysqld.cc +++ b/sql/mysqld.cc @@ -5677,7 +5677,7 @@ The minimum value for this variable is 4096.", (gptr*) &max_system_variables.max_length_for_sort_data, 0, GET_ULONG, REQUIRED_ARG, 1024, 4, 8192*1024L, 0, 1, 0}, {"max_prepared_stmt_count", OPT_MAX_PREPARED_STMT_COUNT, - "Maximum numbrer of prepared statements in the server.", + "Maximum number of prepared statements in the server.", (gptr*) &max_prepared_stmt_count, (gptr*) &max_prepared_stmt_count, 0, GET_ULONG, REQUIRED_ARG, 16382, 0, 1*1024*1024, 0, 1, 0}, {"max_relay_log_size", OPT_MAX_RELAY_LOG_SIZE,