Export to GitHub

spymemcached - issue #315

MemcacheClient with SerializingTranscoder isn't thread safe


Posted on Dec 15, 2014 by Massive Bird

Version 2.11.2

net.spy.memcached.MemcachedClient.incr(String key, int by, long def, int exp)

sometimes produces this error, when it calls in serveral threads from the single volatile MemcachedClient instance.

java.lang.StringIndexOutOfBoundsException String index out of range java.lang.String.charAt(String.java:658) java.util.regex.Pattern$BmpCharProperty.match(Pattern.java:3715) java.util.regex.Pattern$Curly.match0(Pattern.java:4148) java.util.regex.Pattern$Curly.match(Pattern.java:4132) java.util.regex.Pattern$Ques.match(Pattern.java:4079) java.util.regex.Pattern$Begin.match(Pattern.java:3472) java.util.regex.Matcher.match(Matcher.java:1221) java.util.regex.Matcher.matches(Matcher.java:559) net.spy.memcached.util.StringUtils.isJsonObject(StringUtils.java:113) net.spy.memcached.transcoders.SerializingTranscoder.encode(SerializingTranscoder.java:134) net.spy.memcached.MemcachedClient.asyncStore(MemcachedClient.java:305) net.spy.memcached.MemcachedClient.asyncStore(MemcachedClient.java:334) net.spy.memcached.MemcachedClient.mutateWithDefault(MemcachedClient.java:1955) net.spy.memcached.MemcachedClient.incr(MemcachedClient.java:1902)

The method net.spy.memcached.util.StringUtils.isJsonObject isn't thread safe, because it uses the single instance of java.util.regex.Matcher, which isn't thread safe.

Status: New

Labels:
Type-Defect Priority-Medium