summaryrefslogtreecommitdiff
path: root/p2pvr/devices
diff options
context:
space:
mode:
authorDan Goodliffe <dan@randomdan.homeip.net>2017-08-07 00:08:54 +0100
committerDan Goodliffe <dan@randomdan.homeip.net>2017-08-07 00:08:54 +0100
commit3e50a4e08541435dfb647be15173cd35ed52cd6c (patch)
tree3c72e4ed623897b3dc89577443cd19d286b2e7c1 /p2pvr/devices
parentAdd ice_print to device error (diff)
downloadp2pvr-3e50a4e08541435dfb647be15173cd35ed52cd6c.tar.bz2
p2pvr-3e50a4e08541435dfb647be15173cd35ed52cd6c.tar.xz
p2pvr-3e50a4e08541435dfb647be15173cd35ed52cd6c.zip
Have MockDevices extend DevicesI and simply intercept tuner creation with MockTuner
Diffstat (limited to 'p2pvr/devices')
-rw-r--r--p2pvr/devices/devices.cpp24
-rw-r--r--p2pvr/devices/devices.h1
-rw-r--r--p2pvr/devices/mockTuner.cpp2
3 files changed, 14 insertions, 13 deletions
diff --git a/p2pvr/devices/devices.cpp b/p2pvr/devices/devices.cpp
index 420632d..8cd9a74 100644
--- a/p2pvr/devices/devices.cpp
+++ b/p2pvr/devices/devices.cpp
@@ -52,7 +52,9 @@ DevicesI::getTuner()
}
for (auto devItr = devices.begin(); devItr != devices.end(); devItr++) {
try {
- return openTuner(*devItr);
+ TunerPtr tuner = openTuner(*devItr);
+ devices.erase(devItr);
+ return tuner;
}
catch (...) {
logger->messagebf(LOG::DEBUG, "%s: Failed to open device %s", __PRETTY_FUNCTION__,
@@ -121,17 +123,17 @@ DevicesI::releaseTuner(const TunerPtr & tuner)
Lock(lock);
logger->messagebf(LOG::DEBUG, "%s", __PRETTY_FUNCTION__);
auto openTuner = std::find_if(openDevices.begin(), openDevices.end(), [&tuner](const auto & ot) {
- return ot.second->tuner == tuner;
- });
- if (openTuner == openDevices.end()) {
- logger->messagebf(LOG::DEBUG, "%s: Not one of mine", __PRETTY_FUNCTION__);
- throw DeviceError();
+ return ot.second->tuner == tuner;
+ });
+ if (openTuner != openDevices.end()) {
+ openTuner->second->clients -= 1;
+ if (openTuner->second->clients == 0) {
+ openDevices.erase(openTuner);
+ devices.push_back(tuner->GetDevice());
+ }
}
- logger->messagebf(LOG::DEBUG, "%s: Locally owned deivce %s", __PRETTY_FUNCTION__, openTuner->first);
- openTuner->second->clients -= 1;
- if (openTuner->second->clients == 0) {
- openDevices.erase(openTuner);
- devices.push_back(openTuner->second->tuner->GetDevice());
+ else {
+ devices.push_back(tuner->GetDevice());
}
}
diff --git a/p2pvr/devices/devices.h b/p2pvr/devices/devices.h
index d32971f..e575ce6 100644
--- a/p2pvr/devices/devices.h
+++ b/p2pvr/devices/devices.h
@@ -46,7 +46,6 @@ class DLL_PUBLIC DevicesI : public Tuners {
protected:
virtual TunerPtr openTuner(const boost::filesystem::path &) const;
- private:
typedef boost::function<DVBSI::DeliveryPtr()> DeliveryProvider;
typedef boost::function<void(TunerPtr)> Target;
typedef boost::shared_ptr<OpenTuner> OpenTunerPtr;
diff --git a/p2pvr/devices/mockTuner.cpp b/p2pvr/devices/mockTuner.cpp
index 1316b6d..9abcfbf 100644
--- a/p2pvr/devices/mockTuner.cpp
+++ b/p2pvr/devices/mockTuner.cpp
@@ -57,7 +57,7 @@ int MockTuner::GetStatus()
std::string MockTuner::GetDevice()
{
- return 0;
+ return "/dev/dvb/dummy";
}
Ice::ByteSeq MockTuner::Decompress(const Ice::ByteSeq & dataxz)