summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--CONTRIBUTORS4
-rw-r--r--HISTORY7
-rw-r--r--tools.c14
3 files changed, 23 insertions, 2 deletions
diff --git a/CONTRIBUTORS b/CONTRIBUTORS
index f35a50b5..789a39f5 100644
--- a/CONTRIBUTORS
+++ b/CONTRIBUTORS
@@ -1610,3 +1610,7 @@ Thiemo Gehrke <tgehrke@reel-multimedia.com>
Gavin Hamill <gdh@acentral.co.uk>
for reporting a missing #include "thread.h" in dvbspu.c
+
+Petri Hintukainen <Petri.Hintukainen@hut.fi>
+ for suggesting to disable the use of "fadvise" in cUnbufferedFile because there
+ have been several reports that it causes more problems than it solves
diff --git a/HISTORY b/HISTORY
index 2b6cccb2..26e4d2e2 100644
--- a/HISTORY
+++ b/HISTORY
@@ -3963,7 +3963,7 @@ Video Disk Recorder Revision History
commands may now be executed at any time, and the message will be displayed
(no more "pending message").
-2006-01-04: Version 1.3.38
+2006-01-05: Version 1.3.38
- Fixed handling second audio and Dolby Digital PIDs for encrypted channels
(was broken in version 1.3.37).
@@ -4091,3 +4091,8 @@ Video Disk Recorder Revision History
- Removed an obsolete "Summary" text from i18n.c and preceded all key definition
texts with "Key$" to avoid duplicates (reported by Lucian Muresan).
- Added missing #include "thread.h" to dvbspu.c (reported by Gavin Hamill).
+- Disabled the use of "fadvise" in cUnbufferedFile because there have been
+ several reports that it causes more problems than it solves (suggested by
+ Petri Hintukainen). If you want to use "fadvise", you can activate the line
+ //#define USE_FADVISE
+ in tools.c.
diff --git a/tools.c b/tools.c
index 4bcf110f..546f60a1 100644
--- a/tools.c
+++ b/tools.c
@@ -4,7 +4,7 @@
* See the main source file 'vdr.c' for copyright information and
* how to reach the author.
*
- * $Id: tools.c 1.107 2005/12/29 16:02:37 kls Exp $
+ * $Id: tools.c 1.108 2006/01/05 10:41:18 kls Exp $
*/
#include "tools.h"
@@ -1040,6 +1040,8 @@ bool cSafeFile::Close(void)
// --- cUnbufferedFile -------------------------------------------------------
+//#define USE_FADVISE
+
#define READ_AHEAD MEGABYTE(2)
#define WRITE_BUFFER MEGABYTE(10)
@@ -1064,6 +1066,7 @@ int cUnbufferedFile::Open(const char *FileName, int Flags, mode_t Mode)
int cUnbufferedFile::Close(void)
{
+#ifdef USE_FADVISE
if (fd >= 0) {
if (ahead > end)
end = ahead;
@@ -1076,6 +1079,7 @@ int cUnbufferedFile::Close(void)
begin = end = ahead = -1;
written = 0;
}
+#endif
int OldFd = fd;
fd = -1;
return close(OldFd);
@@ -1091,6 +1095,7 @@ off_t cUnbufferedFile::Seek(off_t Offset, int Whence)
ssize_t cUnbufferedFile::Read(void *Data, size_t Size)
{
if (fd >= 0) {
+#ifdef USE_FADVISE
off_t pos = lseek(fd, 0, SEEK_CUR);
// jump forward - adjust end position
if (pos > end)
@@ -1104,7 +1109,9 @@ ssize_t cUnbufferedFile::Read(void *Data, size_t Size)
if (begin >= 0 && end > begin)
posix_fadvise(fd, begin - KILOBYTE(200), end - begin + KILOBYTE(200), POSIX_FADV_DONTNEED);//XXX macros/parameters???
begin = pos;
+#endif
ssize_t bytesRead = safe_read(fd, Data, Size);
+#ifdef USE_FADVISE
if (bytesRead > 0) {
pos += bytesRead;
end = pos;
@@ -1117,6 +1124,7 @@ ssize_t cUnbufferedFile::Read(void *Data, size_t Size)
}
else
end = pos;
+#endif
return bytesRead;
}
return -1;
@@ -1125,8 +1133,11 @@ ssize_t cUnbufferedFile::Read(void *Data, size_t Size)
ssize_t cUnbufferedFile::Write(const void *Data, size_t Size)
{
if (fd >=0) {
+#ifdef USE_FADVISE
off_t pos = lseek(fd, 0, SEEK_CUR);
+#endif
ssize_t bytesWritten = safe_write(fd, Data, Size);
+#ifdef USE_FADVISE
if (bytesWritten >= 0) {
written += bytesWritten;
if (begin >= 0) {
@@ -1146,6 +1157,7 @@ ssize_t cUnbufferedFile::Write(const void *Data, size_t Size)
written = 0;
}
}
+#endif
return bytesWritten;
}
return -1;