Kalev Lember 87ca806
diff -up pcsc-lite-1.6.7/src/winscard_clnt.c.noautostart pcsc-lite-1.6.7/src/winscard_clnt.c
Kalev Lember 87ca806
--- pcsc-lite-1.6.7/src/winscard_clnt.c.noautostart	2011-02-23 00:20:25.000000000 +0200
Kalev Lember 87ca806
+++ pcsc-lite-1.6.7/src/winscard_clnt.c	2011-02-25 17:17:32.201085695 +0200
Kalev Lember 87ca806
@@ -444,80 +444,16 @@ LONG SCardEstablishContext(DWORD dwScope
Kalev Lember 7d47f6f
 	LPCVOID pvReserved2, LPSCARDCONTEXT phContext)
Kalev Lember 7d47f6f
 {
Kalev Lember 7d47f6f
 	LONG rv;
Kalev Lember 7d47f6f
-	int daemon_launched = FALSE;
Kalev Lember 7d47f6f
-	int retries = 0;
Kalev Lember 7d47f6f
 
Kalev Lember 87ca806
 	API_TRACE_IN("%ld, %p, %p", dwScope, pvReserved1, pvReserved2)
Kalev Lember 7d47f6f
 	PROFILE_START
Kalev Lember 7d47f6f
 
Kalev Lember 7d47f6f
-again:
Kalev Lember 7d47f6f
 	/* Check if the server is running */
Kalev Lember 7d47f6f
 	rv = SCardCheckDaemonAvailability();
Kalev Lember 7d47f6f
 	if (SCARD_E_INVALID_HANDLE == rv)
Kalev Lember 7d47f6f
 		/* we reconnected to a daemon or we got called from a forked child */
Kalev Lember 7d47f6f
 		rv = SCardCheckDaemonAvailability();
Kalev Lember 7d47f6f
 
Kalev Lember 7d47f6f
-	if (SCARD_E_NO_SERVICE == rv)
Kalev Lember 7d47f6f
-	{
Kalev Lember 7d47f6f
-launch:
Kalev Lember 7d47f6f
-		if (daemon_launched)
Kalev Lember 7d47f6f
-		{
Kalev Lember 7d47f6f
-			retries++;
Kalev Lember 7d47f6f
-			if (retries < 50)	/* 50 x 100ms = 5 seconds */
Kalev Lember 7d47f6f
-			{
Kalev Lember 7d47f6f
-				/* give some more time to the server to start */
Kalev Lember 7d47f6f
-				SYS_USleep(100*1000);	/* 100 ms */
Kalev Lember 7d47f6f
-				goto again;
Kalev Lember 7d47f6f
-			}
Kalev Lember 7d47f6f
-
Kalev Lember 7d47f6f
-			/* the server failed to start (in time) */
Kalev Lember 7d47f6f
-			goto end;
Kalev Lember 7d47f6f
-		}
Kalev Lember 7d47f6f
-		else
Kalev Lember 7d47f6f
-		{
Kalev Lember 7d47f6f
-			int pid;
Kalev Lember 7d47f6f
-
Kalev Lember 7d47f6f
-			pid = fork();
Kalev Lember 7d47f6f
-
Kalev Lember 7d47f6f
-			if (pid < 0)
Kalev Lember 7d47f6f
-			{
Kalev Lember 7d47f6f
-				Log2(PCSC_LOG_CRITICAL, "fork failed: %s", strerror(errno));
Kalev Lember 7d47f6f
-				rv = SCARD_F_INTERNAL_ERROR;
Kalev Lember 7d47f6f
-				goto end;
Kalev Lember 7d47f6f
-			}
Kalev Lember 7d47f6f
-
Kalev Lember 7d47f6f
-			if (0 == pid)
Kalev Lember 7d47f6f
-			{
Kalev Lember 87ca806
-				int i, max;
Kalev Lember 7d47f6f
-				char *param = getenv("PCSCLITE_PCSCD_ARGS");
Kalev Lember 7d47f6f
-
Kalev Lember 7d47f6f
-				/* close all file handles except stdin, stdout and
Kalev Lember 7d47f6f
-				 * stderr so that pcscd does not confiscate ressources
Kalev Lember 7d47f6f
-				 * allocated by the application */
Kalev Lember 7d47f6f
-				max = sysconf(_SC_OPEN_MAX);
Kalev Lember 7d47f6f
-				if (-1 == max)
Kalev Lember 7d47f6f
-					max = 1024;
Kalev Lember 7d47f6f
-				for (i=3; i
Kalev Lember 7d47f6f
-					(void)close(i);
Kalev Lember 7d47f6f
-
Kalev Lember 7d47f6f
-				/* son process */
Kalev Lember 87ca806
-				execl(PCSCD_BINARY, "pcscd", "--auto-exit", param,
Kalev Lember 7d47f6f
-					(char *)NULL);
Kalev Lember 7d47f6f
-				Log2(PCSC_LOG_CRITICAL, "exec " PCSCD_BINARY " failed: %s",
Kalev Lember 7d47f6f
-					strerror(errno));
Kalev Lember 7d47f6f
-				exit(1);
Kalev Lember 7d47f6f
-			}
Kalev Lember 7d47f6f
-
Kalev Lember 7d47f6f
-			/* father process */
Kalev Lember 7d47f6f
-			daemon_launched = TRUE;
Kalev Lember 7d47f6f
-
Kalev Lember 7d47f6f
-			if (waitpid(pid, NULL, 0) < 0)
Kalev Lember 7d47f6f
-				Log2(PCSC_LOG_CRITICAL, "waitpid failed: %s", strerror(errno));
Kalev Lember 7d47f6f
-
Kalev Lember 7d47f6f
-			goto again;
Kalev Lember 7d47f6f
-		}
Kalev Lember 7d47f6f
-	}
Kalev Lember 7d47f6f
-
Kalev Lember 7d47f6f
 	if (rv != SCARD_S_SUCCESS)
Kalev Lember 7d47f6f
 		goto end;
Kalev Lember 7d47f6f
 
Kalev Lember 87ca806
@@ -526,15 +462,6 @@ launch:
Kalev Lember 7d47f6f
 		pvReserved2, phContext);
Kalev Lember 7d47f6f
 	(void)SCardUnlockThread();
Kalev Lember 7d47f6f
 
Kalev Lember 7d47f6f
-	/* SCardEstablishContextTH may fail if the previous pcscd crashed
Kalev Lember 7d47f6f
-	 * without cleaning /var/run/pcscd/pcscd.comm */
Kalev Lember 7d47f6f
-	if (SCARD_E_NO_SERVICE == rv)
Kalev Lember 7d47f6f
-	{
Kalev Lember 7d47f6f
-		retries++;
Kalev Lember 7d47f6f
-		if (retries <= 1)
Kalev Lember 7d47f6f
-			goto launch;
Kalev Lember 7d47f6f
-	}
Kalev Lember 7d47f6f
-
Kalev Lember 7d47f6f
 end:
Kalev Lember 7d47f6f
 	PROFILE_END(rv)
Kalev Lember 87ca806
 	API_TRACE_OUT("%ld", *phContext)