From 00433fc10cf4070328e18ae045dfc16d57c5b637 Mon Sep 17 00:00:00 2001 From: Simon Bernard Date: Mon, 25 Sep 2017 10:59:50 +0200 Subject: [PATCH] #387: add readlock on InMemoryRegistrationStore.getRegistrationByAdress --- .../impl/InMemoryRegistrationStore.java | 22 ++++++++++++------- 1 file changed, 14 insertions(+), 8 deletions(-) diff --git a/leshan-server-cf/src/main/java/org/eclipse/leshan/server/californium/impl/InMemoryRegistrationStore.java b/leshan-server-cf/src/main/java/org/eclipse/leshan/server/californium/impl/InMemoryRegistrationStore.java index 1792a944a0..d506c06bc5 100644 --- a/leshan-server-cf/src/main/java/org/eclipse/leshan/server/californium/impl/InMemoryRegistrationStore.java +++ b/leshan-server-cf/src/main/java/org/eclipse/leshan/server/californium/impl/InMemoryRegistrationStore.java @@ -128,7 +128,7 @@ public UpdatedRegistration updateRegistration(RegistrationUpdate update) { public Registration getRegistration(String registrationId) { try { lock.readLock().lock(); - + // TODO we should create an index instead of iterate all over the collection if (registrationId != null) { for (Registration registration : regsByEp.values()) { if (registrationId.equals(registration.getId())) { @@ -154,13 +154,20 @@ public Registration getRegistrationByEndpoint(String endpoint) { @Override public Registration getRegistrationByAdress(InetSocketAddress address) { - // TODO we should create an index instead of iterate all over the collection - for (Registration r : regsByEp.values()) { - if (address.getPort() == r.getPort() && address.getAddress().equals(r.getAddress())) { - return r; + try { + lock.readLock().lock(); + // TODO we should create an index instead of iterate all over the collection + if (address != null) { + for (Registration r : regsByEp.values()) { + if (address.getPort() == r.getPort() && address.getAddress().equals(r.getAddress())) { + return r; + } + } } + return null; + } finally { + lock.readLock().unlock(); } - return null; } @Override @@ -314,8 +321,7 @@ public void setContext(byte[] token, CorrelationContext ctx) { Key key = new Key(token); org.eclipse.californium.core.observe.Observation obs = obsByToken.get(key); if (obs != null) { - obsByToken.put(key, - new org.eclipse.californium.core.observe.Observation(obs.getRequest(), ctx)); + obsByToken.put(key, new org.eclipse.californium.core.observe.Observation(obs.getRequest(), ctx)); } } finally { lock.writeLock().unlock();