aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorhuceke <ebsi4711@gmail.com>2012-08-20 13:40:50 -0700
committerhuceke <ebsi4711@gmail.com>2012-08-20 13:40:50 -0700
commit59092d5ad1a4604f26176d58b1c75cff0965e1ad (patch)
treedab1f35a3ba6b9182e9ca8e5d1a062780573c570
parentcca337febcdd5c129f7e31bb48db4aff68883ea4 (diff)
parent1cd3dab30ff9868e27d48c8bfe72252cbc39d88d (diff)
Merge pull request #1309 from huceke/peripherals
[peripherals/udev] fixed do not close fd we got from udev and a race condition
-rw-r--r--xbmc/peripherals/bus/linux/PeripheralBusUSBLibUdev.cpp15
-rw-r--r--xbmc/peripherals/bus/linux/PeripheralBusUSBLibUdev.h1
2 files changed, 7 insertions, 9 deletions
diff --git a/xbmc/peripherals/bus/linux/PeripheralBusUSBLibUdev.cpp b/xbmc/peripherals/bus/linux/PeripheralBusUSBLibUdev.cpp
index 3dff72d6be..7824c369c9 100644
--- a/xbmc/peripherals/bus/linux/PeripheralBusUSBLibUdev.cpp
+++ b/xbmc/peripherals/bus/linux/PeripheralBusUSBLibUdev.cpp
@@ -85,7 +85,6 @@ CPeripheralBusUSB::CPeripheralBusUSB(CPeripherals *manager) :
m_udev = NULL;
m_udevMon = NULL;
- m_udevFd = -1;
if (!(m_udev = udev_new()))
{
@@ -96,9 +95,8 @@ CPeripheralBusUSB::CPeripheralBusUSB(CPeripherals *manager) :
/* set up a devices monitor that listen for any device change */
m_udevMon = udev_monitor_new_from_netlink(m_udev, "udev");
udev_monitor_enable_receiving(m_udevMon);
- m_udevFd = udev_monitor_get_fd(m_udevMon);
- CLog::Log(LOGDEBUG, "%s - initialised udev monitor: %d", __FUNCTION__, m_udevFd);
+ CLog::Log(LOGDEBUG, "%s - initialised udev monitor", __FUNCTION__);
}
CPeripheralBusUSB::~CPeripheralBusUSB(void)
@@ -218,18 +216,19 @@ void CPeripheralBusUSB::Process(void)
void CPeripheralBusUSB::Clear(void)
{
StopThread(false);
- if (m_udevFd != -1)
- close(m_udevFd);
-
- udev_unref(m_udev);
CPeripheralBus::Clear();
}
bool CPeripheralBusUSB::WaitForUpdate()
{
- if (!m_udevFd)
+ int m_udevFd = udev_monitor_get_fd(m_udevMon);
+
+ if (m_udevFd < 0)
+ {
+ CLog::Log(LOGERROR, "%s - get udev monitor", __FUNCTION__);
return false;
+ }
/* poll for udev changes */
struct pollfd pollFd;
diff --git a/xbmc/peripherals/bus/linux/PeripheralBusUSBLibUdev.h b/xbmc/peripherals/bus/linux/PeripheralBusUSBLibUdev.h
index 06c60683e3..e9876cd25d 100644
--- a/xbmc/peripherals/bus/linux/PeripheralBusUSBLibUdev.h
+++ b/xbmc/peripherals/bus/linux/PeripheralBusUSBLibUdev.h
@@ -51,6 +51,5 @@ namespace PERIPHERALS
struct udev * m_udev;
struct udev_monitor *m_udevMon;
- int m_udevFd;
};
}