[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