diff options
author | Lars Hanisch <dvb@flensrocker.de> | 2011-10-26 23:47:02 +0200 |
---|---|---|
committer | Lars Hanisch <dvb@flensrocker.de> | 2011-10-26 23:47:02 +0200 |
commit | b260a0008f98e42a03be27e1c5688a30f8481cd6 (patch) | |
tree | 40139e051af22a32a5e6f65ba2c4d9b94df02ca0 | |
parent | 6842192298a8c1cf38db4c51d62598b704256933 (diff) | |
download | vdr-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.c | 29 | ||||
-rw-r--r-- | monitor.h | 1 |
2 files changed, 4 insertions, 26 deletions
@@ -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; } } @@ -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); |