Commit 37bf8394 authored by jimw@mysql.com's avatar jimw@mysql.com

Add test for madvise() being declared in C++ code, because it is not

on Solaris even though it is available, and declare it ourselves in
that case. (Bug #7156)
parent 6b4baf48
...@@ -2043,6 +2043,13 @@ AC_CACHE_CHECK([style of gethost* routines], mysql_cv_gethost_style, ...@@ -2043,6 +2043,13 @@ AC_CACHE_CHECK([style of gethost* routines], mysql_cv_gethost_style,
AC_LANG_SAVE AC_LANG_SAVE
AC_LANG_CPLUSPLUS AC_LANG_CPLUSPLUS
# Test whether madvise() is declared in C++ code -- it is not on some
# systems, such as Solaris
AC_CHECK_DECLS(madvise, [], [], [#if HAVE_SYS_MMAN_H
#include <sys/types.h>
#include <sys/mman.h>
#endif])
# Do not treat warnings as errors if we are linking against other libc # Do not treat warnings as errors if we are linking against other libc
# this is to work around gcc not being permissive on non-system includes # this is to work around gcc not being permissive on non-system includes
# with respect to ANSI C++ # with respect to ANSI C++
......
...@@ -310,6 +310,10 @@ C_MODE_END ...@@ -310,6 +310,10 @@ C_MODE_END
#undef setrlimit #undef setrlimit
#define setrlimit cma_setrlimit64 #define setrlimit cma_setrlimit64
#endif #endif
/* Declare madvise where it is not declared for C++, like Solaris */
#if HAVE_MADVISE && !HAVE_DECL_MADVISE && defined(__cplusplus)
extern "C" int madvise(void *addr, size_t len, int behav);
#endif
#ifdef __QNXNTO__ #ifdef __QNXNTO__
/* This has to be after include limits.h */ /* This has to be after include limits.h */
......
...@@ -67,7 +67,7 @@ int nisam_extra(N_INFO *info, enum ha_extra_function function) ...@@ -67,7 +67,7 @@ int nisam_extra(N_INFO *info, enum ha_extra_function function)
break; break;
} }
#endif #endif
#if defined(HAVE_MMAP) && defined(HAVE_MADVICE) #if defined(HAVE_MMAP) && defined(HAVE_MADVISE)
if ((info->options & HA_OPTION_COMPRESS_RECORD)) if ((info->options & HA_OPTION_COMPRESS_RECORD))
{ {
pthread_mutex_lock(&info->s->intern_lock); pthread_mutex_lock(&info->s->intern_lock);
...@@ -144,7 +144,7 @@ int nisam_extra(N_INFO *info, enum ha_extra_function function) ...@@ -144,7 +144,7 @@ int nisam_extra(N_INFO *info, enum ha_extra_function function)
info->opt_flag&= ~(READ_CACHE_USED | WRITE_CACHE_USED); info->opt_flag&= ~(READ_CACHE_USED | WRITE_CACHE_USED);
error=end_io_cache(&info->rec_cache); error=end_io_cache(&info->rec_cache);
} }
#if defined(HAVE_MMAP) && defined(HAVE_MADVICE) #if defined(HAVE_MMAP) && defined(HAVE_MADVISE)
if (info->opt_flag & MEMMAP_USED) if (info->opt_flag & MEMMAP_USED)
madvise(info->s->file_map,info->s->state.data_file_length,MADV_RANDOM); madvise(info->s->file_map,info->s->state.data_file_length,MADV_RANDOM);
#endif #endif
......
...@@ -62,7 +62,7 @@ int mi_extra(MI_INFO *info, enum ha_extra_function function, void *extra_arg) ...@@ -62,7 +62,7 @@ int mi_extra(MI_INFO *info, enum ha_extra_function function, void *extra_arg)
} }
if (share->base.blobs) if (share->base.blobs)
mi_alloc_rec_buff(info, -1, &info->rec_buff); mi_alloc_rec_buff(info, -1, &info->rec_buff);
#if defined(HAVE_MMAP) && defined(HAVE_MADVICE) #if defined(HAVE_MMAP) && defined(HAVE_MADVISE)
if (info->opt_flag & MEMMAP_USED) if (info->opt_flag & MEMMAP_USED)
madvise(share->file_map,share->state.state.data_file_length,MADV_RANDOM); madvise(share->file_map,share->state.state.data_file_length,MADV_RANDOM);
#endif #endif
...@@ -93,7 +93,7 @@ int mi_extra(MI_INFO *info, enum ha_extra_function function, void *extra_arg) ...@@ -93,7 +93,7 @@ int mi_extra(MI_INFO *info, enum ha_extra_function function, void *extra_arg)
my_errno=EACCES; my_errno=EACCES;
break; break;
} }
#if defined(HAVE_MMAP) && defined(HAVE_MADVICE) #if defined(HAVE_MMAP) && defined(HAVE_MADVISE)
if ((share->options & HA_OPTION_COMPRESS_RECORD)) if ((share->options & HA_OPTION_COMPRESS_RECORD))
{ {
pthread_mutex_lock(&share->intern_lock); pthread_mutex_lock(&share->intern_lock);
...@@ -177,7 +177,7 @@ int mi_extra(MI_INFO *info, enum ha_extra_function function, void *extra_arg) ...@@ -177,7 +177,7 @@ int mi_extra(MI_INFO *info, enum ha_extra_function function, void *extra_arg)
error=end_io_cache(&info->rec_cache); error=end_io_cache(&info->rec_cache);
/* Sergei will insert full text index caching here */ /* Sergei will insert full text index caching here */
} }
#if defined(HAVE_MMAP) && defined(HAVE_MADVICE) #if defined(HAVE_MMAP) && defined(HAVE_MADVISE)
if (info->opt_flag & MEMMAP_USED) if (info->opt_flag & MEMMAP_USED)
madvise(share->file_map,share->state.state.data_file_length,MADV_RANDOM); madvise(share->file_map,share->state.state.data_file_length,MADV_RANDOM);
#endif #endif
......
...@@ -608,7 +608,9 @@ int ha_tina::rnd_init(bool scan) ...@@ -608,7 +608,9 @@ int ha_tina::rnd_init(bool scan)
current_position= next_position= 0; current_position= next_position= 0;
records= 0; records= 0;
chain_ptr= chain; chain_ptr= chain;
#ifdef HAVE_MADVISE
(void)madvise(share->mapped_file,share->file_stat.st_size,MADV_SEQUENTIAL); (void)madvise(share->mapped_file,share->file_stat.st_size,MADV_SEQUENTIAL);
#endif
DBUG_RETURN(0); DBUG_RETURN(0);
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment