[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