public void startSession(String id, PrintWriter writer) { SlaveBrowser browser = capturedBrowsers.getBrowser(id); Lock lock = locks.get(id); String sessionId = UUID.randomUUID().toString(); if (lock.tryLock(sessionId)) { writer.write(sessionId); } else { // session is probably staled if ((!browser.isCommandRunning() && browser.peekCommand() == null) || ((new Date().getTime() - lock.getLastHeartBeat()) > HEARTBEAT_TIMEOUT)) { lock.forceUnlock(); SlaveBrowser slaveBrowser = capturedBrowsers.getBrowser(id); slaveBrowser.clearCommandRunning(); slaveBrowser.clearResponseQueue(); filesCache.clear(); writer.write(lock.tryLock(sessionId) ? sessionId : "FAILED"); } else { writer.write("FAILED"); } } writer.flush(); }