[Pcsclite-cvs-commit] r5058 - in /trunk/PCSC/src: readerfactory.c readerfactory.h winscard.c

rousseau at users.alioth.debian.org rousseau at users.alioth.debian.org
Fri Jul 2 14:40:04 UTC 2010


Author: rousseau
Date: Fri Jul  2 14:39:55 2010
New Revision: 5058

URL: http://svn.debian.org/wsvn/pcsclite/?sc=1&rev=5058
Log:
RFCheckSharing(), RFLockSharing(), RFUnlockSharing() &
RFUnlockAllSharing(): add the  READER_CONTEXT * rContext parameter to
avoid recomputing it internally (gain a few CPU cycles)

Modified:
    trunk/PCSC/src/readerfactory.c
    trunk/PCSC/src/readerfactory.h
    trunk/PCSC/src/winscard.c

Modified: trunk/PCSC/src/readerfactory.c
URL: http://svn.debian.org/wsvn/pcsclite/trunk/PCSC/src/readerfactory.c?rev=5058&op=diff
==============================================================================
--- trunk/PCSC/src/readerfactory.c (original)
+++ trunk/PCSC/src/readerfactory.c Fri Jul  2 14:39:55 2010
@@ -892,31 +892,20 @@
 	return SCARD_S_SUCCESS;
 }
 
-LONG RFCheckSharing(SCARDHANDLE hCard)
-{
-	LONG rv;
-	READER_CONTEXT * rContext = NULL;
-
-	rv = RFReaderInfoById(hCard, &rContext);
-
-	if (rv != SCARD_S_SUCCESS)
-		return rv;
-
+LONG RFCheckSharing(SCARDHANDLE hCard,READER_CONTEXT * rContext)
+{
 	if (rContext->hLockId == 0 || rContext->hLockId == hCard)
 		return SCARD_S_SUCCESS;
 	else
 		return SCARD_E_SHARING_VIOLATION;
 }
 
-LONG RFLockSharing(SCARDHANDLE hCard)
-{
-	READER_CONTEXT * rContext = NULL;
+LONG RFLockSharing(SCARDHANDLE hCard, READER_CONTEXT * rContext)
+{
 	LONG rv;
 
-	(void)RFReaderInfoById(hCard, &rContext);
-
 	(void)pthread_mutex_lock(&LockMutex);
-	rv = RFCheckSharing(hCard);
+	rv = RFCheckSharing(hCard, rContext);
 	if (SCARD_S_SUCCESS == rv)
 	{
 		rContext->LockCount += 1;
@@ -927,17 +916,12 @@
 	return rv;
 }
 
-LONG RFUnlockSharing(SCARDHANDLE hCard)
-{
-	READER_CONTEXT * rContext = NULL;
+LONG RFUnlockSharing(SCARDHANDLE hCard, READER_CONTEXT * rContext)
+{
 	LONG rv;
 
-	rv = RFReaderInfoById(hCard, &rContext);
-	if (rv != SCARD_S_SUCCESS)
-		return rv;
-
 	(void)pthread_mutex_lock(&LockMutex);
-	rv = RFCheckSharing(hCard);
+	rv = RFCheckSharing(hCard, rContext);
 	if (SCARD_S_SUCCESS == rv)
 	{
 		if (rContext->LockCount > 0)
@@ -950,17 +934,12 @@
 	return rv;
 }
 
-LONG RFUnlockAllSharing(SCARDHANDLE hCard)
-{
-	READER_CONTEXT * rContext = NULL;
+LONG RFUnlockAllSharing(SCARDHANDLE hCard, READER_CONTEXT * rContext)
+{
 	LONG rv;
 
-	rv = RFReaderInfoById(hCard, &rContext);
-	if (rv != SCARD_S_SUCCESS)
-		return rv;
-
 	(void)pthread_mutex_lock(&LockMutex);
-	rv = RFCheckSharing(hCard);
+	rv = RFCheckSharing(hCard, rContext);
 	if (SCARD_S_SUCCESS == rv)
 	{
 		rContext->LockCount = 0;

Modified: trunk/PCSC/src/readerfactory.h
URL: http://svn.debian.org/wsvn/pcsclite/trunk/PCSC/src/readerfactory.h?rev=5058&op=diff
==============================================================================
--- trunk/PCSC/src/readerfactory.h (original)
+++ trunk/PCSC/src/readerfactory.h Fri Jul  2 14:39:55 2010
@@ -146,10 +146,10 @@
 	LONG RFReaderInfo(LPSTR, /*@out@*/ struct ReaderContext **);
 	LONG RFReaderInfoNamePort(int, LPSTR, /*@out@*/ struct ReaderContext **);
 	LONG RFReaderInfoById(DWORD, /*@out@*/ struct ReaderContext **);
-	LONG RFCheckSharing(SCARDHANDLE);
-	LONG RFLockSharing(SCARDHANDLE);
-	LONG RFUnlockSharing(SCARDHANDLE);
-	LONG RFUnlockAllSharing(SCARDHANDLE);
+	LONG RFCheckSharing(SCARDHANDLE, READER_CONTEXT *);
+	LONG RFLockSharing(SCARDHANDLE, READER_CONTEXT *);
+	LONG RFUnlockSharing(SCARDHANDLE, READER_CONTEXT *);
+	LONG RFUnlockAllSharing(SCARDHANDLE, READER_CONTEXT *);
 	LONG RFLoadReader(READER_CONTEXT *);
 	LONG RFBindFunctions(READER_CONTEXT *);
 	LONG RFUnBindFunctions(READER_CONTEXT *);

Modified: trunk/PCSC/src/winscard.c
URL: http://svn.debian.org/wsvn/pcsclite/trunk/PCSC/src/winscard.c?rev=5058&op=diff
==============================================================================
--- trunk/PCSC/src/winscard.c (original)
+++ trunk/PCSC/src/winscard.c Fri Jul  2 14:39:55 2010
@@ -455,7 +455,7 @@
 		if (rContext->contexts == SCARD_NO_CONTEXT)
 		{
 			rContext->contexts = SCARD_EXCLUSIVE_CONTEXT;
-			(void)RFLockSharing(*phCard);
+			(void)RFLockSharing(*phCard, rContext);
 		}
 		else
 		{
@@ -559,7 +559,7 @@
 	/*
 	 * Make sure no one has a lock on this reader
 	 */
-	rv = RFCheckSharing(hCard);
+	rv = RFCheckSharing(hCard, rContext);
 	if (rv != SCARD_S_SUCCESS)
 		return rv;
 
@@ -747,7 +747,7 @@
 			if (rContext->contexts == SCARD_LAST_CONTEXT)
 			{
 				rContext->contexts = SCARD_EXCLUSIVE_CONTEXT;
-				(void)RFLockSharing(hCard);
+				(void)RFLockSharing(hCard, rContext);
 			} else
 			{
 				return SCARD_E_SHARING_VIOLATION;
@@ -765,7 +765,7 @@
 			/*
 			 * We are in exclusive mode but want to share now
 			 */
-			(void)RFUnlockSharing(hCard);
+			(void)RFUnlockSharing(hCard, rContext);
 			rContext->contexts = SCARD_LAST_CONTEXT;
 		}
 	} else if (dwShareMode == SCARD_SHARE_DIRECT)
@@ -780,7 +780,7 @@
 			/*
 			 * We are in exclusive mode but want to share now
 			 */
-			(void)RFUnlockSharing(hCard);
+			(void)RFUnlockSharing(hCard, rContext);
 			rContext->contexts = SCARD_LAST_CONTEXT;
 		}
 	} else
@@ -841,7 +841,7 @@
 	/*
 	 * Unlock any blocks on this context
 	 */
-	rv = RFUnlockAllSharing(hCard);
+	rv = RFUnlockAllSharing(hCard, rContext);
 	if (rv != SCARD_S_SUCCESS)
 		return rv;
 
@@ -1014,7 +1014,7 @@
 	if ((rv = RFCheckReaderEventState(rContext, hCard)) != SCARD_S_SUCCESS)
 		return rv;
 
-	rv = RFLockSharing(hCard);
+	rv = RFLockSharing(hCard, rContext);
 
 	/* if the transaction is not yet ready we sleep a bit so the client
 	 * do not retry immediately */
@@ -1170,7 +1170,7 @@
 	/*
 	 * Unlock any blocks on this context
 	 */
-	(void)RFUnlockSharing(hCard);
+	(void)RFUnlockSharing(hCard, rContext);
 
 	Log2(PCSC_LOG_DEBUG, "Status: 0x%08X", rv);
 
@@ -1206,7 +1206,7 @@
 	if ((rv = RFCheckReaderEventState(rContext, hCard)) != SCARD_S_SUCCESS)
 		return rv;
 
-	rv = RFUnlockSharing(hCard);
+	rv = RFUnlockSharing(hCard, rContext);
 
 	Log2(PCSC_LOG_DEBUG, "Status: 0x%08X", rv);
 
@@ -1226,7 +1226,7 @@
 	/*
 	 * Make sure no one has a lock on this reader
 	 */
-	if ((rv = RFCheckSharing(hCard)) != SCARD_S_SUCCESS)
+	if ((rv = RFCheckSharing(hCard, rContext)) != SCARD_S_SUCCESS)
 		return rv;
 
 	rv = RFReaderInfoById(hCard, &rContext);
@@ -1365,7 +1365,7 @@
 	/*
 	 * Make sure no one has a lock on this reader
 	 */
-	if ((rv = RFCheckSharing(hCard)) != SCARD_S_SUCCESS)
+	if ((rv = RFCheckSharing(hCard, rContext)) != SCARD_S_SUCCESS)
 		return rv;
 
 	rv = RFReaderInfoById(hCard, &rContext);
@@ -1414,7 +1414,7 @@
 	/*
 	 * Make sure no one has a lock on this reader
 	 */
-	if ((rv = RFCheckSharing(hCard)) != SCARD_S_SUCCESS)
+	if ((rv = RFCheckSharing(hCard, rContext)) != SCARD_S_SUCCESS)
 		return rv;
 
 	rv = RFReaderInfoById(hCard, &rContext);
@@ -1488,7 +1488,7 @@
 	/*
 	 * Make sure no one has a lock on this reader
 	 */
-	if ((rv = RFCheckSharing(hCard)) != SCARD_S_SUCCESS)
+	if ((rv = RFCheckSharing(hCard, rContext)) != SCARD_S_SUCCESS)
 		return rv;
 
 	rv = RFReaderInfoById(hCard, &rContext);
@@ -1553,7 +1553,7 @@
 	/*
 	 * Make sure no one has a lock on this reader
 	 */
-	if ((rv = RFCheckSharing(hCard)) != SCARD_S_SUCCESS)
+	if ((rv = RFCheckSharing(hCard, rContext)) != SCARD_S_SUCCESS)
 		return rv;
 
 	rv = RFReaderInfoById(hCard, &rContext);




More information about the Pcsclite-cvs-commit mailing list