@@ -12,10 +12,11 @@ * Handle for the CACKey NaCl Target */ var cackeyHandle = null; var cackeyPCSCHandle = null; var cackeyPCSCHandleUsable = false; +var cackeyPCSCHandleLastUsed = (new Date()).getTime(); /* * Handle and ID for outstanding callbacks */ var cackeyOutstandingCallbacks = {} @@ -541,12 +542,10 @@ console.log("[cackey] cackeyUninitPCSC() called"); if (cackeyPCSCHandle != null) { console.log("[cackey] Deleting PCSC handle"); - delete cackeyPCSCHandle; - cackeyPCSCHandle = null; } cackeyPCSCHandleUsable = false; @@ -671,13 +670,24 @@ */ function cackeyInitPCSC(callbackAfterInit, callbackInitFailed) { /* * Start the Google PCSC Interface */ + var now, lastUsedMillisecondsAgo; console.log("[cackey] cackeyInitPCSC() called"); + now = (new Date()).getTime(); + lastUsedMillisecondsAgo = now - cackeyPCSCHandleLastUsed; + + if (lastUsedMillisecondsAgo > 30000) { + console.log("[cackey] PCSC handle was last used " + lastUsedMillisecondsAgo + "ms ago, restarting to get a new handle"); + cackeyRestart(); + } + + cackeyPCSCHandleLastUsed = now; + /* * Queue this callback to be completed when initialization is complete */ if (callbackAfterInit) { cackeyCallbackAfterInit.push({"successCallback": callbackAfterInit, "failureCallback": callbackInitFailed});