From 61f103133741ad8b9b45d03d89bbdc09a61bbfef Mon Sep 17 00:00:00 2001 From: =?utf8?q?Felix=20D=C3=B6rre?= Date: Wed, 10 Sep 2014 19:46:37 +0200 Subject: [PATCH] FIX: synchronization for IDCachable-Objects Move synchronization blocks out so that it's garanteed that only one instance exists per id. --- src/org/cacert/gigi/dbObjects/Domain.java | 6 ++---- src/org/cacert/gigi/dbObjects/DomainPingConfiguration.java | 2 +- src/org/cacert/gigi/dbObjects/EmailAddress.java | 6 ++---- src/org/cacert/gigi/dbObjects/User.java | 6 ++---- 4 files changed, 7 insertions(+), 13 deletions(-) diff --git a/src/org/cacert/gigi/dbObjects/Domain.java b/src/org/cacert/gigi/dbObjects/Domain.java index eb63b30b..3685de1b 100644 --- a/src/org/cacert/gigi/dbObjects/Domain.java +++ b/src/org/cacert/gigi/dbObjects/Domain.java @@ -222,13 +222,11 @@ public class Domain implements IdCachable { private static ObjectCache myCache = new ObjectCache<>(); - public static Domain getById(int id) throws IllegalArgumentException { + public static synchronized Domain getById(int id) throws IllegalArgumentException { Domain em = myCache.get(id); if (em == null) { try { - synchronized (Domain.class) { - myCache.put(em = new Domain(id)); - } + myCache.put(em = new Domain(id)); } catch (SQLException e1) { throw new IllegalArgumentException(e1); } diff --git a/src/org/cacert/gigi/dbObjects/DomainPingConfiguration.java b/src/org/cacert/gigi/dbObjects/DomainPingConfiguration.java index 93eb363e..f5dd2a2c 100644 --- a/src/org/cacert/gigi/dbObjects/DomainPingConfiguration.java +++ b/src/org/cacert/gigi/dbObjects/DomainPingConfiguration.java @@ -53,7 +53,7 @@ public class DomainPingConfiguration implements IdCachable { private static ObjectCache cache = new ObjectCache<>(); - public static DomainPingConfiguration getById(int id) { + public static synchronized DomainPingConfiguration getById(int id) { DomainPingConfiguration res = cache.get(id); if (res == null) { try { diff --git a/src/org/cacert/gigi/dbObjects/EmailAddress.java b/src/org/cacert/gigi/dbObjects/EmailAddress.java index 2acf5900..1191952f 100644 --- a/src/org/cacert/gigi/dbObjects/EmailAddress.java +++ b/src/org/cacert/gigi/dbObjects/EmailAddress.java @@ -106,13 +106,11 @@ public class EmailAddress implements IdCachable { private static ObjectCache myCache = new ObjectCache<>(); - public static EmailAddress getById(int id) throws IllegalArgumentException { + public static synchronized EmailAddress getById(int id) throws IllegalArgumentException { EmailAddress em = myCache.get(id); if (em == null) { try { - synchronized (EmailAddress.class) { - myCache.put(em = new EmailAddress(id)); - } + myCache.put(em = new EmailAddress(id)); } catch (SQLException e1) { throw new IllegalArgumentException(e1); } diff --git a/src/org/cacert/gigi/dbObjects/User.java b/src/org/cacert/gigi/dbObjects/User.java index 7a11cdb4..bc927fa9 100644 --- a/src/org/cacert/gigi/dbObjects/User.java +++ b/src/org/cacert/gigi/dbObjects/User.java @@ -506,12 +506,10 @@ public class User implements IdCachable { private static ObjectCache myCache = new ObjectCache<>(); - public static User getById(int id) { + public static synchronized User getById(int id) { User u = myCache.get(id); if (u == null) { - synchronized (User.class) { - myCache.put(u = new User(id)); - } + myCache.put(u = new User(id)); } return u; } -- 2.39.2