[Pcsclite-cvs-commit] r7033 - trunk/PCSC/src
ludovic.rousseau at free.fr
ludovic.rousseau at free.fr
Fri Nov 7 10:04:52 UTC 2014
Author: rousseau
Date: 2014-11-07 10:04:52 +0000 (Fri, 07 Nov 2014)
New Revision: 7033
Modified:
trunk/PCSC/src/hotplug_libudev.c
Log:
Fix again libudev hotplug
The change in revision 7028 broke the fix introduced in revision 6951.
Thanks again to Stefani Seibold for the new fix
http://lists.alioth.debian.org/pipermail/pcsclite-muscle/Week-of-Mon-20141103/000226.html
Modified: trunk/PCSC/src/hotplug_libudev.c
===================================================================
--- trunk/PCSC/src/hotplug_libudev.c 2014-11-07 09:02:36 UTC (rev 7032)
+++ trunk/PCSC/src/hotplug_libudev.c 2014-11-07 10:04:52 UTC (rev 7033)
@@ -556,9 +556,9 @@
}
-static void HPEstablishUSBNotifications(void *notused)
+static void HPEstablishUSBNotifications(void *arg)
{
- struct udev_monitor *udev_monitor;
+ struct udev_monitor *udev_monitor = arg;
int r;
int fd;
struct pollfd pfd;
@@ -566,29 +566,6 @@
pthread_setcancelstate(PTHREAD_CANCEL_DISABLE, NULL);
pthread_setcanceltype(PTHREAD_CANCEL_DEFERRED, NULL);
- udev_monitor = udev_monitor_new_from_netlink(Udev, "udev");
- if (NULL == udev_monitor)
- {
- Log1(PCSC_LOG_ERROR, "udev_monitor_new_from_netlink() error");
- pthread_exit(NULL);
- }
-
- /* filter only the interfaces */
- r = udev_monitor_filter_add_match_subsystem_devtype(udev_monitor, "usb",
- "usb_interface");
- if (r)
- {
- Log2(PCSC_LOG_ERROR, "udev_monitor_filter_add_match_subsystem_devtype() error: %d\n", r);
- pthread_exit(NULL);
- }
-
- r = udev_monitor_enable_receiving(udev_monitor);
- if (r)
- {
- Log2(PCSC_LOG_ERROR, "udev_monitor_enable_receiving() error: %d\n", r);
- pthread_exit(NULL);
- }
-
/* udev monitor file descriptor */
fd = udev_monitor_get_fd(udev_monitor);
if (fd < 0)
@@ -706,6 +683,9 @@
*/
ULONG HPRegisterForHotplugEvents(void)
{
+ struct udev_monitor *udev_monitor;
+ int r;
+
if (driverSize <= 0)
{
Log1(PCSC_LOG_INFO, "No bundle files in pcsc drivers directory: "
@@ -722,11 +702,34 @@
return SCARD_F_INTERNAL_ERROR;
}
+ udev_monitor = udev_monitor_new_from_netlink(Udev, "udev");
+ if (NULL == udev_monitor)
+ {
+ Log1(PCSC_LOG_ERROR, "udev_monitor_new_from_netlink() error");
+ pthread_exit(NULL);
+ }
+
+ /* filter only the interfaces */
+ r = udev_monitor_filter_add_match_subsystem_devtype(udev_monitor, "usb",
+ "usb_interface");
+ if (r)
+ {
+ Log2(PCSC_LOG_ERROR, "udev_monitor_filter_add_match_subsystem_devtype() error: %d\n", r);
+ pthread_exit(NULL);
+ }
+
+ r = udev_monitor_enable_receiving(udev_monitor);
+ if (r)
+ {
+ Log2(PCSC_LOG_ERROR, "udev_monitor_enable_receiving() error: %d\n", r);
+ pthread_exit(NULL);
+ }
+
/* scan the USB bus at least once before accepting client connections */
HPScanUSB(Udev);
if (ThreadCreate(&usbNotifyThread, 0,
- (PCSCLITE_THREAD_FUNCTION( )) HPEstablishUSBNotifications, NULL))
+ (PCSCLITE_THREAD_FUNCTION( )) HPEstablishUSBNotifications, udev_monitor))
{
Log1(PCSC_LOG_ERROR, "ThreadCreate() failed");
return SCARD_F_INTERNAL_ERROR;
More information about the Pcsclite-cvs-commit
mailing list