mirror of
https://github.com/VDR4Arch/vdr.git
synced 2023-10-10 13:36:52 +02:00
Disabled the use of posix_fadvise() when reading
This commit is contained in:
parent
adc7056c9e
commit
8a7540321d
6
HISTORY
6
HISTORY
@ -9162,7 +9162,7 @@ Video Disk Recorder Revision History
|
||||
a subdirectory.
|
||||
- SVDRP peering can now be limited to the default SVDRP host (see MANUAL for details).
|
||||
|
||||
2018-02-28: Version 2.3.9
|
||||
2018-03-03: Version 2.3.9
|
||||
|
||||
- Updated the Italian OSD texts (thanks to Diego Pierotto).
|
||||
- Updated the Finnish OSD texts (thanks to Rolf Ahrenberg).
|
||||
@ -9289,3 +9289,7 @@ Video Disk Recorder Revision History
|
||||
- When remote timers are fetched from a peer VDR, we no longer blindly delete and re-add
|
||||
them, but rather compare them and make only the minimum necessary changes.
|
||||
- Fixed the CompareInts() function.
|
||||
- Disabled the use of posix_fadvise() when reading (i.e. replaying), since it caused
|
||||
stuttering replay in fast forward and fast rewind mode in case the video directory
|
||||
is mounted via NFS. You can re-enable it by setting the macro USE_FADVISE_READ to 1
|
||||
in tools.c.
|
||||
|
@ -1,6 +1,3 @@
|
||||
PRELIMINARY VERSION!
|
||||
====================
|
||||
|
||||
This is a summary of the changes in VDR 2.4.0 since the last stable
|
||||
version 2.2.0. It only contains things that are of actual importance
|
||||
to the user and doesn't mention the many fixes and improvements that
|
||||
@ -440,3 +437,7 @@ Misc:
|
||||
'DEPRECATED_VDR_CHARSET_OVERRIDE=1' when compiling in order to restore this
|
||||
functionality. However, it is recommended to use the command line option --chartab
|
||||
instead.
|
||||
- Disabled the use of posix_fadvise() when reading (i.e. replaying), since it caused
|
||||
stuttering replay in fast forward and fast rewind mode in case the video directory
|
||||
is mounted via NFS. You can re-enable it by setting the macro USE_FADVISE_READ to 1
|
||||
in tools.c.
|
||||
|
21
tools.c
21
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 4.9 2018/02/27 10:09:21 kls Exp $
|
||||
* $Id: tools.c 4.10 2018/03/03 19:35:31 kls Exp $
|
||||
*/
|
||||
|
||||
#include "tools.h"
|
||||
@ -1774,7 +1774,12 @@ bool cSafeFile::Close(void)
|
||||
|
||||
// --- cUnbufferedFile -------------------------------------------------------
|
||||
|
||||
#define USE_FADVISE
|
||||
#ifndef USE_FADVISE_READ
|
||||
#define USE_FADVISE_READ 0
|
||||
#endif
|
||||
#ifndef USE_FADVISE_WRITE
|
||||
#define USE_FADVISE_WRITE 1
|
||||
#endif
|
||||
|
||||
#define WRITE_BUFFER KILOBYTE(800)
|
||||
|
||||
@ -1793,7 +1798,7 @@ int cUnbufferedFile::Open(const char *FileName, int Flags, mode_t Mode)
|
||||
Close();
|
||||
fd = open(FileName, Flags, Mode);
|
||||
curpos = 0;
|
||||
#ifdef USE_FADVISE
|
||||
#if USE_FADVISE_READ || USE_FADVISE_WRITE
|
||||
begin = lastpos = ahead = 0;
|
||||
cachedstart = 0;
|
||||
cachedend = 0;
|
||||
@ -1809,7 +1814,7 @@ int cUnbufferedFile::Open(const char *FileName, int Flags, mode_t Mode)
|
||||
int cUnbufferedFile::Close(void)
|
||||
{
|
||||
if (fd >= 0) {
|
||||
#ifdef USE_FADVISE
|
||||
#if USE_FADVISE_READ || USE_FADVISE_WRITE
|
||||
if (totwritten) // if we wrote anything make sure the data has hit the disk before
|
||||
fdatasync(fd); // calling fadvise, as this is our last chance to un-cache it.
|
||||
posix_fadvise(fd, 0, 0, POSIX_FADV_DONTNEED);
|
||||
@ -1852,7 +1857,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
|
||||
#if USE_FADVISE_READ
|
||||
off_t jumped = curpos-lastpos; // nonzero means we're not at the last offset
|
||||
if ((cachedstart < cachedend) && (curpos < cachedstart || curpos > cachedend)) {
|
||||
// current position is outside the cached window -- invalidate it.
|
||||
@ -1865,7 +1870,7 @@ ssize_t cUnbufferedFile::Read(void *Data, size_t Size)
|
||||
ssize_t bytesRead = safe_read(fd, Data, Size);
|
||||
if (bytesRead > 0) {
|
||||
curpos += bytesRead;
|
||||
#ifdef USE_FADVISE
|
||||
#if USE_FADVISE_READ
|
||||
cachedend = max(cachedend, curpos);
|
||||
|
||||
// Read ahead:
|
||||
@ -1887,7 +1892,7 @@ ssize_t cUnbufferedFile::Read(void *Data, size_t Size)
|
||||
ahead = curpos; // jumped -> we really don't want any readahead, otherwise e.g. fast-rewind gets in trouble.
|
||||
#endif
|
||||
}
|
||||
#ifdef USE_FADVISE
|
||||
#if USE_FADVISE_READ
|
||||
if (cachedstart < cachedend) {
|
||||
if (curpos - cachedstart > READCHUNK * 2) {
|
||||
// current position has moved forward enough, shrink tail window.
|
||||
@ -1911,7 +1916,7 @@ ssize_t cUnbufferedFile::Write(const void *Data, size_t Size)
|
||||
{
|
||||
if (fd >=0) {
|
||||
ssize_t bytesWritten = safe_write(fd, Data, Size);
|
||||
#ifdef USE_FADVISE
|
||||
#if USE_FADVISE_WRITE
|
||||
if (bytesWritten > 0) {
|
||||
begin = min(begin, curpos);
|
||||
curpos += bytesWritten;
|
||||
|
Loading…
Reference in New Issue
Block a user