From 66b0a5784df4aeb62284c2421b46a80213f3d112 Mon Sep 17 00:00:00 2001 From: Jonathan Leibiusky Date: Wed, 11 May 2011 19:45:07 -0300 Subject: [PATCH] fix md5 hashing as MessageDigest is not threadsafe, now using ThreadLocal --- src/main/java/redis/clients/util/Hashing.java | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/src/main/java/redis/clients/util/Hashing.java b/src/main/java/redis/clients/util/Hashing.java index 3323347..1460f03 100644 --- a/src/main/java/redis/clients/util/Hashing.java +++ b/src/main/java/redis/clients/util/Hashing.java @@ -5,23 +5,22 @@ import java.security.NoSuchAlgorithmException; public interface Hashing { public static final Hashing MURMUR_HASH = new MurmurHash(); + public ThreadLocal md5Holder = new ThreadLocal(); public static final Hashing MD5 = new Hashing() { - private MessageDigest md5 = null; // avoid recurring construction - public long hash(String key) { return hash(SafeEncoder.encode(key)); } public long hash(byte[] key) { - if (md5 == null) { - try { - md5 = MessageDigest.getInstance("MD5"); - } catch (NoSuchAlgorithmException e) { - throw new IllegalStateException( - "++++ no md5 algorythm found"); + try { + if (md5Holder.get() == null) { + md5Holder.set(MessageDigest.getInstance("MD5")); } + } catch (NoSuchAlgorithmException e) { + throw new IllegalStateException("++++ no md5 algorythm found"); } + MessageDigest md5 = md5Holder.get(); md5.reset(); md5.update(key);