From 60e82d86efdef16951955b04e40043d8e004cd68 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Peter=20=C3=85strand?= Date: Tue, 26 Jan 2010 12:23:53 +0000 Subject: [PATCH] Reset smart card state before reconnect. This fixes stability problems when using smart cards in conjunction with RandR. git-svn-id: svn://svn.code.sf.net/p/rdesktop/code/rdesktop/trunk@1561 423420c4-83ab-492f-b58f-81f9feb106b5 --- proto.h | 1 + rdesktop.c | 1 + scard.c | 9 +++++++++ 3 files changed, 11 insertions(+) diff --git a/proto.h b/proto.h index e257469..78764ea 100644 --- a/proto.h +++ b/proto.h @@ -314,6 +314,7 @@ void scard_lock(int lock); void scard_unlock(int lock); int scard_enum_devices(uint32 * id, char *optarg); void scardSetInfo(uint32 device, uint32 id, uint32 bytes_out); +void scard_reset_state(); /* *INDENT-OFF* */ #ifdef __cplusplus diff --git a/rdesktop.c b/rdesktop.c index 6f11a4f..82678a4 100644 --- a/rdesktop.c +++ b/rdesktop.c @@ -351,6 +351,7 @@ static void rdesktop_reset_state(void) { rdp_reset_state(); + scard_reset_state(); } static RD_BOOL diff --git a/scard.c b/scard.c index c119c5d..8fb3c48 100644 --- a/scard.c +++ b/scard.c @@ -2626,3 +2626,12 @@ scard_unlock(int lock) { pthread_mutex_unlock(scard_mutex[lock]); } + +void scard_reset_state() +{ + curDevice = 0; + curId = 0; + curBytesOut = 0; + + queueFirst = queueLast = NULL; +}