This doesn't make sense. The regexMatcher object and the matchList
object are both local to the current thread. Why do we need to
synchronize them?
Adrian Crum
Sandglass Software
www.sandglass-software.com
On 11/13/2013 5:04 PM, [email protected] wrote:
Author: jleroux
Date: Wed Nov 13 22:04:33 2013
New Revision: 1541746
URL: http://svn.apache.org/r1541746
Log:
Fix an issue introduced with r1541641, by finally using synchronized that I
tried to avoid
Modified:
ofbiz/trunk/applications/product/src/org/ofbiz/product/product/ProductEvents.java
Modified:
ofbiz/trunk/applications/product/src/org/ofbiz/product/product/ProductEvents.java
URL:
http://svn.apache.org/viewvc/ofbiz/trunk/applications/product/src/org/ofbiz/product/product/ProductEvents.java?rev=1541746&r1=1541745&r2=1541746&view=diff
==============================================================================
---
ofbiz/trunk/applications/product/src/org/ofbiz/product/product/ProductEvents.java
(original)
+++
ofbiz/trunk/applications/product/src/org/ofbiz/product/product/ProductEvents.java
Wed Nov 13 22:04:33 2013
@@ -24,6 +24,7 @@ import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Set;
+import java.util.regex.Matcher;
import java.util.regex.Pattern;
import javax.servlet.http.HttpServletRequest;
@@ -1186,8 +1187,11 @@ public class ProductEvents {
if (UtilValidate.isNotEmpty(productId) &&
UtilValidate.isNotEmpty(productTags)) {
List<String> matchList = FastList.newInstance();
Pattern regex =
Pattern.compile("[^\\s\"']+|\"([^\"]*)\"|'([^']*)'");
- while (regex.matcher(productTags).find()) {
- matchList.add(regex.matcher(productTags).group().replace("'",
""));
+ Matcher regexMatcher = regex.matcher(productTags);
+ synchronized (regexMatcher) {
+ while (regexMatcher.find()) {
+ matchList.add(regexMatcher.group().replace("'", ""));
+ }
}
GenericValue userLogin = null;