summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLars Hanisch <dvb@flensrocker.de>2011-10-26 23:47:02 +0200
committerLars Hanisch <dvb@flensrocker.de>2011-10-26 23:47:02 +0200
commitb260a0008f98e42a03be27e1c5688a30f8481cd6 (patch)
tree40139e051af22a32a5e6f65ba2c4d9b94df02ca0
parent6842192298a8c1cf38db4c51d62598b704256933 (diff)
downloadvdr-plugin-dynamite-b260a0008f98e42a03be27e1c5688a30f8481cd6.tar.gz
vdr-plugin-dynamite-b260a0008f98e42a03be27e1c5688a30f8481cd6.tar.bz2
react on first udev remove message which starts with the given syspathv0.0.8b
On some devices udev will only signal a remove of an i2c device if the frontend of a dvb-usb-device is still in use.
-rw-r--r--monitor.c29
-rw-r--r--monitor.h1
2 files changed, 4 insertions, 26 deletions
diff --git a/monitor.c b/monitor.c
index 824d15c..5bf9adb 100644
--- a/monitor.c
+++ b/monitor.c
@@ -49,22 +49,6 @@ bool cUdevMonitor::AddFilter(const char *Subsystem, cUdevFilter *Filter)
return true;
}
-bool cUdevMonitor::DelFilter(const char *Subsystem, cUdevFilter *Filter)
-{
- if (Filter == NULL)
- return false;
- cUdevMonitor *m = Get(Subsystem);
- if (m == NULL) {
- delete Filter;
- return false;
- }
- if (!m->DelFilter(Filter)) {
- delete Filter;
- return false;
- }
- return true;
-}
-
void cUdevMonitor::ShutdownAllMonitors(void)
{
cMutexLock lock(&mutexMonitors);
@@ -257,11 +241,10 @@ void cUdevUsbRemoveFilter::Process(cUdevDevice &Device)
const char *action = Device.GetAction();
const char *syspath = Device.GetSyspath();
if (action && syspath && (strcmp(action, "remove") == 0)) {
- isyslog("dynamite: usb remove monitor: action = %s", action);
- isyslog("dynamite: usb remove monitor: syspath = %s", syspath);
cMutexLock lock(&mutexItems);
for (cItem *i = items.First(); i; i = items.Next(i)) {
- if (strcmp(**(i->item), syspath) == 0) {
+ if (strncmp(**(i->item), syspath, strlen(**(i->item))) == 0) {
+ isyslog("dynamite: usb remove monitor: syspath is %s", syspath);
isyslog("dynamite: usb remove monitor: force detach of %s", **(i->devpath));
cDynamicDeviceProbe::QueueDynamicDeviceCommand(ddpcService, *cString::sprintf("dynamite-ForceDetachDevice-v0.1 %s", **(i->devpath)));
}
@@ -276,13 +259,13 @@ void cUdevUsbRemoveFilter::AddItem(const char *item, const char *devpath)
cMutexLock lock(&mutexFilter);
if (filter == NULL) {
filter = new cUdevUsbRemoveFilter();
- if (!cUdevMonitor::AddFilter( "usb", filter)) {
+ if (!cUdevMonitor::AddFilter( NULL, filter)) {
delete filter;
filter = NULL;
return;
}
}
- isyslog("dynamite: usb remove monitor: add syspath = %s", item);
+ isyslog("dynamite: usb remove monitor: add syspath %s", item);
cMutexLock lock2(&filter->mutexItems);
filter->items.Add(new cItem(item, devpath));
}
@@ -298,10 +281,6 @@ void cUdevUsbRemoveFilter::RemoveItem(const char *item, const char *devpath)
for (cItem *i = filter->items.First(); i; i = filter->items.Next(i)) {
if ((strcmp(**(i->item), item) == 0) && (strcmp(**(i->devpath), devpath) == 0)) {
filter->items.Del(i);
- if (filter->items.Count() == 0) {
- cUdevMonitor::DelFilter("usb", filter);
- filter = NULL;
- }
return;
}
}
diff --git a/monitor.h b/monitor.h
index 09d01ec..c370db0 100644
--- a/monitor.h
+++ b/monitor.h
@@ -27,7 +27,6 @@ protected:
public:
static cUdevMonitor *Get(const char *Subsystem);
static bool AddFilter(const char *Subsystem, cUdevFilter *Filter);
- static bool DelFilter(const char *Subsystem, cUdevFilter *Filter);
static void ShutdownAllMonitors(void);
virtual ~cUdevMonitor(void);