[Pcsclite-cvs-commit] r2598 - trunk/PCSC/src

rousseau at alioth.debian.org rousseau at alioth.debian.org
Thu Jul 5 10:04:09 UTC 2007


Author: rousseau
Date: 2007-07-05 10:04:08 +0000 (Thu, 05 Jul 2007)
New Revision: 2598

Modified:
   trunk/PCSC/src/hotplug_libusb.c
   trunk/PCSC/src/pcscdaemon.c
Log:
do not call a Log function in a signal handler and do hotplug
synchronously. See Debian bug #430492

Thanks to Russell Stuart for the bug report and patch


Modified: trunk/PCSC/src/hotplug_libusb.c
===================================================================
--- trunk/PCSC/src/hotplug_libusb.c	2007-07-05 09:06:52 UTC (rev 2597)
+++ trunk/PCSC/src/hotplug_libusb.c	2007-07-05 10:04:08 UTC (rev 2598)
@@ -56,6 +56,7 @@
 static PCSCLITE_THREAD_T usbNotifyThread;
 static int driverSize = -1;
 static char AraKiriHotPlug = FALSE;
+static int rescan_pipe[] = { -1, -1 };
 extern int HPForceReaderPolling;
 
 /* values of ifdCapabilities bits */
@@ -411,11 +412,29 @@
 		do_polling = TRUE;
 	}
 
-	while (do_polling)
+	if (do_polling)
 	{
-		SYS_Sleep(HPForceReaderPolling);
-		HPRescanUsbBus();
+		while (!AraKiriHotPlug)
+		{
+			SYS_Sleep(HPForceReaderPolling);
+			HPRescanUsbBus();
+		}
 	}
+	else
+	{
+		char dummy;
+
+	  	pipe(rescan_pipe);
+		while (read(rescan_pipe[0], &dummy, sizeof(dummy)) > 0)
+		{
+			Log1(PCSC_LOG_INFO, "Reload serial configuration");
+			HPRescanUsbBus();
+			RFReCheckReaderConf();
+			Log1(PCSC_LOG_INFO, "End reload serial configuration");
+		}
+		close(rescan_pipe[0]);
+		rescan_pipe[0] = -1;
+	}
 }
 
 LONG HPSearchHotPluggables(void)
@@ -439,6 +458,11 @@
 LONG HPStopHotPluggables(void)
 {
 	AraKiriHotPlug = TRUE;
+	if (rescan_pipe[1] >= 0)
+	{
+	  	close(rescan_pipe[1]);
+		rescan_pipe[1] = -1;
+	}
 
 	return 0;
 }
@@ -535,8 +559,11 @@
 
 void HPReCheckSerialReaders(void)
 {
-	HPRescanUsbBus();
-	RFReCheckReaderConf();
+  	if (rescan_pipe[1] >= 0)
+	{
+		char dummy = 0;
+		write(rescan_pipe[1], &dummy, sizeof(dummy));
+	}
 }
 
 #endif

Modified: trunk/PCSC/src/pcscdaemon.c
===================================================================
--- trunk/PCSC/src/pcscdaemon.c	2007-07-05 09:06:52 UTC (rev 2597)
+++ trunk/PCSC/src/pcscdaemon.c	2007-07-05 10:04:08 UTC (rev 2598)
@@ -558,24 +558,10 @@
 
 void signal_reload(int sig)
 {
-	static int rescan_ongoing = FALSE;
-
 	if (AraKiri)
 		return;
 
-	Log1(PCSC_LOG_INFO, "Reload serial configuration");
-	if (rescan_ongoing)
-	{
-		Log1(PCSC_LOG_INFO, "Rescan already ongoing");
-		return;
-	}
-
-	rescan_ongoing = TRUE;
-
 	HPReCheckSerialReaders();
-
-	rescan_ongoing = FALSE;
-	Log1(PCSC_LOG_INFO, "End reload serial configuration");
 } /* signal_reload */
 
 void signal_trap(int sig)




More information about the Pcsclite-cvs-commit mailing list