[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