From 0d9ae80d99e4009fb03d67ca99d3ee84ce69034d Mon Sep 17 00:00:00 2001 From: Steven Pisarski Date: Mon, 18 May 2015 15:29:17 -0600 Subject: [PATCH] Improved thread error handling. Change-Id: I5bcde1b086d3abbcbc13740e6979515e17b8781b Signed-off-by: Steven Pisarski --- .../org/umu/cops/prpep/COPSPepConnection.java | 86 ++++++++++--------- 1 file changed, 46 insertions(+), 40 deletions(-) diff --git a/packetcable-driver/src/main/java/org/umu/cops/prpep/COPSPepConnection.java b/packetcable-driver/src/main/java/org/umu/cops/prpep/COPSPepConnection.java index 66455eb..af9645e 100644 --- a/packetcable-driver/src/main/java/org/umu/cops/prpep/COPSPepConnection.java +++ b/packetcable-driver/src/main/java/org/umu/cops/prpep/COPSPepConnection.java @@ -60,57 +60,63 @@ public class COPSPepConnection extends COPSConnection { Date lastSendKa = new Date(); Date lastSendAcc = new Date(); Date lastRecKa = new Date(); - try { while (!_sock.isClosed()) { - if (_sock.getInputStream().available() != 0) { - processMessage(_sock); - lastRecKa = new Date(); - } - - // Keep Alive - if (_kaTimer > 0) { - // Timeout at PDP - int _startTime = (int) (lastRecKa.getTime()); - int cTime = (int) (new Date().getTime()); - - if ((cTime - _startTime) > _kaTimer*1000) { - _sock.close(); - // Notify all Request State Managers - notifyNoKAAllReqStateMan(); + try { + if (_sock.getInputStream().available() != 0) { + processMessage(_sock); + lastRecKa = new Date(); } - // Send to PEP - _startTime = (int) (lastSendKa.getTime()); - cTime = (int) (new Date().getTime()); - - if ((cTime - _startTime) > ((_kaTimer*3/4) * 1000)) { - final COPSKAMsg msg = new COPSKAMsg(null); - COPSTransceiver.sendMsg(msg, _sock); - lastSendKa = new Date(); + // Keep Alive + if (_kaTimer > 0) { + // Timeout at PDP + int _startTime = (int) (lastRecKa.getTime()); + int cTime = (int) (new Date().getTime()); + + if ((cTime - _startTime) > _kaTimer*1000) { + _sock.close(); + // Notify all Request State Managers + notifyNoKAAllReqStateMan(); + } + + // Send to PEP + _startTime = (int) (lastSendKa.getTime()); + cTime = (int) (new Date().getTime()); + + if ((cTime - _startTime) > ((_kaTimer*3/4) * 1000)) { + final COPSKAMsg msg = new COPSKAMsg(null); + COPSTransceiver.sendMsg(msg, _sock); + lastSendKa = new Date(); + } } - } - // Accounting - if (_acctTimer > 0) { - int _startTime = (int) (lastSendAcc.getTime()); - int cTime = (int) (new Date().getTime()); + // Accounting + if (_acctTimer > 0) { + int _startTime = (int) (lastSendAcc.getTime()); + int cTime = (int) (new Date().getTime()); - if ((cTime - _startTime) > ((_acctTimer*3/4)*1000)) { - // Notify all Request State Managers - notifyAcctAllReqStateMan(); - lastSendAcc = new Date(); + if ((cTime - _startTime) > ((_acctTimer*3/4)*1000)) { + // Notify all Request State Managers + notifyAcctAllReqStateMan(); + lastSendAcc = new Date(); + } } - } - try { - Thread.sleep(500); + try { + Thread.sleep(500); + } catch (InterruptedException e) { + logger.error("Closing connection"); + break; + } catch (Exception e) { + logger.error("Unexpected exception while sleeping. Continue processing messages", e); + } } catch (Exception e) { - logger.error("Exception thrown while sleeping", e); + logger.error("Unexpected error while processing socket messages. Continue processing", e); + } catch (Throwable e) { + logger.error("Unexpected fatal error while processing COPS messages. Stopping thread", e); + break; } } - } catch (Exception e) { - logger.error("Error while processing socket messages", e); - } // connection closed by server // COPSDebug.out(getClass().getName(),"Connection closed by server"); -- 2.36.6