diff options
author | Lars Hanisch <dvb@flensrocker.de> | 2011-03-18 00:08:18 +0100 |
---|---|---|
committer | Lars Hanisch <dvb@flensrocker.de> | 2011-03-18 00:08:18 +0100 |
commit | 064797c1d6bdf08dcc0bc9c1195cb765431cca6b (patch) | |
tree | 32a6fb5822fff734eba34c9c2491945fa15a6b4c /dynamicdevice.c | |
parent | 346ebc85cd43fbf778a200e912bcb6079b611e64 (diff) | |
download | vdr-plugin-dynamite-064797c1d6bdf08dcc0bc9c1195cb765431cca6b.tar.gz vdr-plugin-dynamite-064797c1d6bdf08dcc0bc9c1195cb765431cca6b.tar.bz2 |
add new command ForceDetachDevice, the device will be detached regardless of any receivers or locks
Diffstat (limited to 'dynamicdevice.c')
-rw-r--r-- | dynamicdevice.c | 30 |
1 files changed, 16 insertions, 14 deletions
diff --git a/dynamicdevice.c b/dynamicdevice.c index bfd06af..ba74193 100644 --- a/dynamicdevice.c +++ b/dynamicdevice.c @@ -39,7 +39,7 @@ bool cDynamicDevice::ProcessQueuedCommands(void) } case ddpcDetach: { - DetachDevice(*dev->devpath); + DetachDevice(*dev->devpath, false); break; } case ddpcService: @@ -165,7 +165,7 @@ attach: return ddrcSuccess; } -eDynamicDeviceReturnCode cDynamicDevice::DetachDevice(const char *DevPath) +eDynamicDeviceReturnCode cDynamicDevice::DetachDevice(const char *DevPath, bool Force) { if (!DevPath) return ddrcNotSupported; @@ -183,23 +183,25 @@ eDynamicDeviceReturnCode cDynamicDevice::DetachDevice(const char *DevPath) return ddrcNotFound; } - if (!dynamicdevice[index]->isDetachable) { - esyslog("dynamite: detaching of device %s is not allowed", DevPath); - return ddrcNotAllowed; - } + if (!Force) { + if (!dynamicdevice[index]->isDetachable) { + esyslog("dynamite: detaching of device %s is not allowed", DevPath); + return ddrcNotAllowed; + } - if (dynamicdevice[index] == PrimaryDevice()) { - esyslog("dynamite: detaching of primary device %s is not supported", DevPath); - return ddrcIsPrimaryDevice; - } + if (dynamicdevice[index] == PrimaryDevice()) { + esyslog("dynamite: detaching of primary device %s is not supported", DevPath); + return ddrcIsPrimaryDevice; + } - if (dynamicdevice[index]->Receiving(false)) { - esyslog("dynamite: can't detach device %s, it's receiving something important", DevPath); - return ddrcIsReceiving; + if (dynamicdevice[index]->Receiving(false)) { + esyslog("dynamite: can't detach device %s, it's receiving something important", DevPath); + return ddrcIsReceiving; + } } dynamicdevice[index]->DeleteSubDevice(); - isyslog("dynamite: detached device %s", DevPath); + isyslog("dynamite: detached device %s%s", DevPath, (Force ? " (forced)" : "")); return ddrcSuccess; } |