summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPierre Ossman <ossman@cendio.se>2007-09-10 11:35:30 +0000
committerPierre Ossman <ossman@cendio.se>2007-09-10 11:35:30 +0000
commitd9b3c0eef2ba256b4e1e694c3828d1f4713ebf68 (patch)
treee13d35cda623880f75d2e18db4cc9d03bbb8af42
parent9630e8df575ff35cab9bc95151fcbb3d56fb29fd (diff)
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
-rw-r--r--configure.ac4
-rw-r--r--src/pulsecore/core-util.c8
-rw-r--r--src/pulsecore/sound-file-stream.c2
-rw-r--r--src/pulsecore/sound-file.c2
4 files changed, 11 insertions, 5 deletions
diff --git a/configure.ac b/configure.ac
index 71e95b8e..c4f26c4e 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 67d33e7c..13a7252c 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 36c7f03c..d5523a64 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 ef43eef0..8727ba15 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);