[Pcsclite-cvs-commit] PCSC/src readerfactory.c,1.26,1.27

sauveron-guest@quantz.debian.org sauveron-guest@quantz.debian.org
Mon, 29 Sep 2003 16:05:28 +0200


Update of /cvsroot/pcsclite/PCSC/src
In directory quantz:/tmp/cvs-serv14167/src

Modified Files:
	readerfactory.c 
Log Message:
Clean up 2 memory leaks

Index: readerfactory.c
===================================================================
RCS file: /cvsroot/pcsclite/PCSC/src/readerfactory.c,v
retrieving revision 1.26
retrieving revision 1.27
diff -u -d -r1.26 -r1.27
--- readerfactory.c	29 Sep 2003 13:35:45 -0000	1.26
+++ readerfactory.c	29 Sep 2003 14:05:26 -0000	1.27
@@ -246,14 +246,33 @@
 
 		(sContexts[dwContext])->dwVersion = 0;
 		(sContexts[dwContext])->dwPort = 0;
-		(sContexts[dwContext])->mMutex = 0;
 		(sContexts[dwContext])->vHandle = 0;
 		(sContexts[dwContext])->dwPublicID = 0;
 		(sContexts[dwContext])->dwIdentity = 0;
 
-		if (parentNode >= 0)
+		/*
+		 * Destroy and free the mutex 
+		 */
+		if (*(sContexts[dwContext])->dwMutex == 1)
 		{
-			*(sContexts[dwContext])->dwFeeds -= 1;
+			SYS_MutexDestroy((sContexts[dwContext])->mMutex);
+			free((sContexts[dwContext])->mMutex);
+		}
+
+		*(sContexts[dwContext])->dwMutex -= 1;
+
+		if (*(sContexts[dwContext])->dwMutex == 0)
+		{
+			free((sContexts[dwContext])->dwMutex);
+			(sContexts[dwContext])->dwMutex = 0;
+		}
+
+		*(sContexts[dwContext])->dwFeeds -= 1;
+
+		if (*(sContexts[dwContext])->dwFeeds == 0)
+		{
+			free((sContexts[dwContext])->dwFeeds);
+			(sContexts[dwContext])->dwFeeds = 0;
 		}
 
 		*dwNumContexts -= 1;
@@ -405,12 +424,36 @@
 				
 				(sContexts[dwContextB])->dwVersion = 0;
 				(sContexts[dwContextB])->dwPort = 0;
-				(sContexts[dwContextB])->mMutex = 0;
 				(sContexts[dwContextB])->vHandle = 0;
 				(sContexts[dwContextB])->dwPublicID = 0;
 				(sContexts[dwContextB])->dwIdentity = 0;
 				
+
+				/*
+				 * Destroy and free the mutex 
+				 */
+				if (*(sContexts[dwContextB])->dwMutex == 1)
+				{
+					SYS_MutexDestroy((sContexts[dwContextB])->mMutex);
+					free((sContexts[dwContextB])->mMutex);
+				}
+
+				*(sContexts[dwContextB])->dwMutex -= 1;
+
+				if (*(sContexts[dwContextB])->dwMutex == 0)
+				{
+					free((sContexts[dwContextB])->dwMutex);
+					(sContexts[dwContextB])->dwMutex = 0;
+				}
+
 				*(sContexts[dwContextB])->dwFeeds -= 1;
+
+				if (*(sContexts[dwContextB])->dwFeeds == 0)
+				{
+					free((sContexts[dwContextB])->dwFeeds);
+					(sContexts[dwContextB])->dwFeeds = 0;
+				}
+
 				*dwNumContexts -= 1;
 
 				return rv;