Ensure the semaphore is released if a RuntimeException is thrown.

This commit is contained in:
akwizgran
2012-12-16 00:16:19 +00:00
parent 7887331d1c
commit a7acec8f72

View File

@@ -137,13 +137,15 @@ class ModemPlugin implements DuplexPlugin, Modem.Callback {
LOG.info("Previous poll still in progress");
return;
}
try {
// Get the ISO 3166 code for the caller's country
String callerIso = callback.getLocalProperties().get("iso3166");
if(StringUtils.isNullOrEmpty(callerIso)) return;
// Call contacts one at a time in a random order
Map<ContactId, TransportProperties> remote =
callback.getRemoteProperties();
List<ContactId> contacts = new ArrayList<ContactId>(remote.keySet());
List<ContactId> contacts =
new ArrayList<ContactId>(remote.keySet());
Collections.shuffle(contacts);
Iterator<ContactId> it = contacts.iterator();
while(it.hasNext() && running) {
@@ -163,7 +165,8 @@ class ModemPlugin implements DuplexPlugin, Modem.Callback {
try {
if(!modem.dial(number)) continue;
} catch(IOException e) {
if(LOG.isLoggable(WARNING)) LOG.log(WARNING, e.toString(), e);
if(LOG.isLoggable(WARNING))
LOG.log(WARNING, e.toString(), e);
if(resetModem()) continue;
break;
}
@@ -179,8 +182,10 @@ class ModemPlugin implements DuplexPlugin, Modem.Callback {
break;
}
}
} finally {
polling.release();
}
}
public DuplexTransportConnection createConnection(ContactId c) {
if(!running) return null;