summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKlaus Schmidinger <vdr@tvdr.de>2009-05-31 11:47:05 +0200
committerKlaus Schmidinger <vdr@tvdr.de>2009-05-31 11:47:05 +0200
commit81cc592c336b45b32086cfeeec2495e0f7f2ded2 (patch)
tree15a09c17f66f8dd9dade5ff658eb4439d3207ecd
parent3de4811a424e984a1dfa271a3be5f4137c935bc1 (diff)
downloadvdr-81cc592c336b45b32086cfeeec2495e0f7f2ded2.tar.gz
vdr-81cc592c336b45b32086cfeeec2495e0f7f2ded2.tar.bz2
Fixed calling close(-1) in cUnbufferedFile::Close()
-rw-r--r--CONTRIBUTORS1
-rw-r--r--HISTORY1
-rw-r--r--tools.c14
3 files changed, 10 insertions, 6 deletions
diff --git a/CONTRIBUTORS b/CONTRIBUTORS
index eb6dfc90..8b289bf7 100644
--- a/CONTRIBUTORS
+++ b/CONTRIBUTORS
@@ -1218,6 +1218,7 @@ Reinhard Nissl <rnissl@gmx.de>
for reporting a typo in aspect ratio 2.21:1
for reporting a problem in case the PIDs change during recording
for reporting a memory leak when reaching the end of a recording during replay
+ for reporting a call to close(-1) in cUnbufferedFile::Close()
Richard Robson <richard_robson@beeb.net>
for reporting freezing replay if a timer starts while in Transfer Mode from the
diff --git a/HISTORY b/HISTORY
index 234d625f..f32238ca 100644
--- a/HISTORY
+++ b/HISTORY
@@ -6114,3 +6114,4 @@ Video Disk Recorder Revision History
- Updated the Ukrainian OSD texts (thanks to Yarema Aka Knedlyk).
- Fixed a memory leak when reaching the end of a recording during replay (reported
by Reinhard Nissl).
+- Fixed calling close(-1) in cUnbufferedFile::Close() (reported by Reinhard Nissl).
diff --git a/tools.c b/tools.c
index f49206f0..9ef61f57 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 2.2 2009/01/16 14:29:08 kls Exp $
+ * $Id: tools.c 2.3 2009/05/31 11:43:24 kls Exp $
*/
#include "tools.h"
@@ -1473,16 +1473,18 @@ int cUnbufferedFile::Open(const char *FileName, int Flags, mode_t Mode)
int cUnbufferedFile::Close(void)
{
-#ifdef USE_FADVISE
if (fd >= 0) {
+#ifdef USE_FADVISE
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);
- }
#endif
- int OldFd = fd;
- fd = -1;
- return close(OldFd);
+ int OldFd = fd;
+ fd = -1;
+ return close(OldFd);
+ }
+ errno = EBADF;
+ return -1;
}
// When replaying and going e.g. FF->PLAY the position jumps back 2..8M