aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFelix Domke <tmbinc@elitedvb.net>2006-04-09 21:54:13 +0000
committerFelix Domke <tmbinc@elitedvb.net>2006-04-09 21:54:13 +0000
commite7bc6dda564f72ea1ed33a4d420cbce75b37879c (patch)
treece0f83c540d65995692f570e547f9df8a0df32cb
parent5f45eb94454f5787d87725c9d2a73cecc84eda11 (diff)
downloadenigma2-e7bc6dda564f72ea1ed33a4d420cbce75b37879c.tar.gz
enigma2-e7bc6dda564f72ea1ed33a4d420cbce75b37879c.zip
fix fd leak for recordings
-rw-r--r--lib/service/servicedvbrecord.cpp7
-rw-r--r--lib/service/servicedvbrecord.h1
2 files changed, 8 insertions, 0 deletions
diff --git a/lib/service/servicedvbrecord.cpp b/lib/service/servicedvbrecord.cpp
index e150ae1d..d0da074a 100644
--- a/lib/service/servicedvbrecord.cpp
+++ b/lib/service/servicedvbrecord.cpp
@@ -12,6 +12,7 @@ eDVBServiceRecord::eDVBServiceRecord(const eServiceReferenceDVB &ref): m_ref(ref
m_state = stateIdle;
m_want_record = 0;
m_tuned = 0;
+ m_target_fd = -1;
}
void eDVBServiceRecord::serviceEvent(int event)
@@ -108,6 +109,11 @@ RESULT eDVBServiceRecord::stop()
{
if (m_record)
m_record->stop();
+ if (m_target_fd >= 0)
+ {
+ ::close(m_target_fd);
+ m_target_fd = -1;
+ }
m_state = statePrepared;
}
@@ -170,6 +176,7 @@ int eDVBServiceRecord::doRecord()
}
m_record->setTargetFD(fd);
m_record->setTargetFilename(m_filename.c_str());
+ m_target_fd = fd;
}
eDebug("starting recording..");
diff --git a/lib/service/servicedvbrecord.h b/lib/service/servicedvbrecord.h
index 25ca3e56..dd00ee8f 100644
--- a/lib/service/servicedvbrecord.h
+++ b/lib/service/servicedvbrecord.h
@@ -32,6 +32,7 @@ private:
int m_recording, m_tuned;
std::set<int> m_pids_active;
std::string m_filename;
+ int m_target_fd;
int doPrepare();
int doRecord();