[Pcsclite-cvs-commit] r6055 - /trunk/PCSC/src/winscard_clnt.c
rousseau at users.alioth.debian.org
rousseau at users.alioth.debian.org
Thu Oct 20 15:04:49 UTC 2011
Author: rousseau
Date: Thu Oct 20 15:04:49 2011
New Revision: 6055
URL: http://svn.debian.org/wsvn/pcsclite/?sc=1&rev=6055
Log:
SCardEstablishContext(): Invalidate all the handles in the son after a fork
The Unitary Test UnitaryTests/SCard_fork.py now works
We now use pthread_atfork() instead of the DO_CHECK_SAME_PROCESS hack
(disabled by default)
Modified:
trunk/PCSC/src/winscard_clnt.c
Modified: trunk/PCSC/src/winscard_clnt.c
URL: http://svn.debian.org/wsvn/pcsclite/trunk/PCSC/src/winscard_clnt.c?rev=6055&op=diff
==============================================================================
--- trunk/PCSC/src/winscard_clnt.c (original)
+++ trunk/PCSC/src/winscard_clnt.c Thu Oct 20 15:04:49 2011
@@ -364,6 +364,7 @@
/*@out@*/ SCONTEXTMAP * *, /*@out@*/ CHANNEL_MAP * *);
static LONG SCardRemoveHandle(SCARDHANDLE);
+static void SCardInvalidateHandles(void);
static LONG SCardGetSetAttrib(SCARDHANDLE hCard, int command, DWORD dwAttrId,
LPBYTE pbAttr, LPDWORD pcbAttrLen);
@@ -448,9 +449,19 @@
int daemon_launched = FALSE;
int retries = 0;
#endif
+ static int first_time = TRUE;
API_TRACE_IN("%ld, %p, %p", dwScope, pvReserved1, pvReserved2)
PROFILE_START
+
+ /* Some setup for the first execution */
+ if (first_time)
+ {
+ first_time = FALSE;
+
+ /* Invalidate all the handles in the son after a fork */
+ pthread_atfork(NULL, NULL, SCardInvalidateHandles);
+ }
#ifdef ENABLE_AUTOSTART
again:
@@ -3717,8 +3728,7 @@
return SCARD_S_SUCCESS;
}
-#ifdef DO_CHECK_SAME_PROCESS
-static LONG SCardInvalidateHandles(void)
+static void SCardInvalidateHandles(void)
{
/* invalid all handles */
(void)SCardLockThread();
@@ -3735,10 +3745,9 @@
}
(void)SCardUnlockThread();
-
- return SCARD_E_INVALID_HANDLE;
}
+#ifdef DO_CHECK_SAME_PROCESS
static LONG SCardCheckSameProcess(void)
{
/* after fork() need to restart */
More information about the Pcsclite-cvs-commit
mailing list