From d9b3c0eef2ba256b4e1e694c3828d1f4713ebf68 Mon Sep 17 00:00:00 2001 From: Pierre Ossman Date: Mon, 10 Sep 2007 11:35:30 +0000 Subject: [PATCH] posix_madvise and posix_fadvise aren't present on all systems. git-svn-id: file:///home/lennart/svn/public/pulseaudio/branches/lennart@1783 fefdeb5f-60dc-0310-8127-8f9354f1896f --- configure.ac | 4 ++-- src/pulsecore/core-util.c | 8 +++++--- src/pulsecore/sound-file-stream.c | 2 ++ src/pulsecore/sound-file.c | 2 ++ 4 files changed, 11 insertions(+), 5 deletions(-) diff --git a/configure.ac b/configure.ac index 71e95b8..c4f26c4 100644 --- a/configure.ac +++ b/configure.ac @@ -247,8 +247,8 @@ AC_FUNC_FORK AC_FUNC_GETGROUPS AC_FUNC_SELECT_ARGTYPES AC_CHECK_FUNCS([chmod chown getaddrinfo getgrgid_r getpwuid_r gettimeofday \ - getuid inet_ntop inet_pton nanosleep pipe posix_memalign setpgid setsid \ - shm_open sigaction sleep sysconf]) + getuid inet_ntop inet_pton nanosleep pipe posix_fadvise posix_madvise \ + posix_memalign setpgid setsid shm_open sigaction sleep sysconf]) AC_CHECK_FUNCS([mkfifo], [HAVE_MKFIFO=1], [HAVE_MKFIFO=0]) AM_CONDITIONAL(HAVE_MKFIFO, test "x$HAVE_MKFIFO" = "x1") diff --git a/src/pulsecore/core-util.c b/src/pulsecore/core-util.c index 67d33e7..13a7252 100644 --- a/src/pulsecore/core-util.c +++ b/src/pulsecore/core-util.c @@ -1262,11 +1262,13 @@ void *pa_will_need(const void *p, size_t l) { a = PA_PAGE_ALIGN_PTR(p); size = (const uint8_t*) p + l - (const uint8_t*) a; - + +#ifdef HAVE_POSIX_MADVISE if ((r = posix_madvise((void*) a, size, POSIX_MADV_WILLNEED)) == 0) { pa_log_debug("posix_madvise() worked fine!"); return (void*) p; } +#endif /* Most likely the memory was not mmap()ed from a file and thus * madvise() didn't work, so let's misuse mlock() do page this @@ -1279,7 +1281,7 @@ void *pa_will_need(const void *p, size_t l) { pa_assert_se(getrlimit(RLIMIT_MEMLOCK, &rlim) == 0); if (rlim.rlim_cur < PA_PAGE_SIZE) { - pa_log_debug("posix_madvise() failed, resource limits don't allow mlock(), can't page in data: %s", pa_cstrerror(r)); + pa_log_debug("posix_madvise() failed (or doesn't exist), resource limits don't allow mlock(), can't page in data: %s", pa_cstrerror(r)); return (void*) p; } @@ -1288,7 +1290,7 @@ void *pa_will_need(const void *p, size_t l) { bs = PA_PAGE_SIZE*4; #endif - pa_log_debug("posix_madvise() failed, trying mlock(): %s", pa_cstrerror(r)); + pa_log_debug("posix_madvise() failed (or doesn't exist), trying mlock(): %s", pa_cstrerror(r)); while (size > 0 && bs > 0) { diff --git a/src/pulsecore/sound-file-stream.c b/src/pulsecore/sound-file-stream.c index 36c7f03..d5523a6 100644 --- a/src/pulsecore/sound-file-stream.c +++ b/src/pulsecore/sound-file-stream.c @@ -255,6 +255,7 @@ int pa_play_file( * file reader into the main event loop and pass the data over the * asyncmsgq. */ +#ifdef HAVE_POSIX_FADVISE if (posix_fadvise(fd, 0, 0, POSIX_FADV_SEQUENTIAL) < 0) { pa_log_warn("POSIX_FADV_SEQUENTIAL failed: %s", pa_cstrerror(errno)); goto fail; @@ -266,6 +267,7 @@ int pa_play_file( goto fail; } else pa_log_debug("POSIX_FADV_WILLNEED succeeded."); +#endif if (!(u->sndfile = sf_open_fd(fd, SFM_READ, &sfinfo, 1))) { pa_log("Failed to open file %s", fname); diff --git a/src/pulsecore/sound-file.c b/src/pulsecore/sound-file.c index ef43eef..8727ba1 100644 --- a/src/pulsecore/sound-file.c +++ b/src/pulsecore/sound-file.c @@ -67,11 +67,13 @@ int pa_sound_file_load( goto finish; } +#ifdef HAVE_POSIX_FADVISE if (posix_fadvise(fd, 0, 0, POSIX_FADV_SEQUENTIAL) < 0) { pa_log_warn("POSIX_FADV_SEQUENTIAL failed: %s", pa_cstrerror(errno)); goto finish; } else pa_log_debug("POSIX_FADV_SEQUENTIAL succeeded."); +#endif if (!(sf = sf_open_fd(fd, SFM_READ, &sfinfo, 1))) { pa_log("Failed to open file %s", fname); -- 2.7.4