Author: markphip Date: Fri Apr 26 19:48:34 2013 New Revision: 1476359 URL: http://svn.apache.org/r1476359 Log: JavaHL: fix a thread safety bug that has been observed in Subclipse.
The Java SimpleDateFormat class is not thread safe. Solved by synchronizing the use of the object. Also audited all of our usage of this class and only this one usage has an issue. There are alternate implementations we could use, but we would have to copy in the class to our package. I chose to take the simple approach. One example we could use if someone objects to using synchronized. https://code.google.com/p/safe-simple-date-format/ [ in subversion/bindings/javahl/ ] * src/org/apache/subversion/javahl/types/LogDate.java Synchronize the usage of SimpleDateFormat * src/org/tigris/subversion/javahl/LogDate.java Synchronize the usage of SimpleDateFormat Modified: subversion/trunk/subversion/bindings/javahl/src/org/apache/subversion/javahl/types/LogDate.java subversion/trunk/subversion/bindings/javahl/src/org/tigris/subversion/javahl/LogDate.java Modified: subversion/trunk/subversion/bindings/javahl/src/org/apache/subversion/javahl/types/LogDate.java URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/bindings/javahl/src/org/apache/subversion/javahl/types/LogDate.java?rev=1476359&r1=1476358&r2=1476359&view=diff ============================================================================== --- subversion/trunk/subversion/bindings/javahl/src/org/apache/subversion/javahl/types/LogDate.java (original) +++ subversion/trunk/subversion/bindings/javahl/src/org/apache/subversion/javahl/types/LogDate.java Fri Apr 26 19:48:34 2013 @@ -51,7 +51,11 @@ public class LogDate implements java.io. { throw new ParseException("String is not a valid Subversion date", 0); } - Date date = formatter.parse(datestr.substring(0, 23) + " UTC"); + Date date; + synchronized(formatter) + { + date = formatter.parse(datestr.substring(0, 23) + " UTC"); + } this.cachedString = datestr; cachedDate = Calendar.getInstance(UTC); cachedDate.setTime(date); Modified: subversion/trunk/subversion/bindings/javahl/src/org/tigris/subversion/javahl/LogDate.java URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/bindings/javahl/src/org/tigris/subversion/javahl/LogDate.java?rev=1476359&r1=1476358&r2=1476359&view=diff ============================================================================== --- subversion/trunk/subversion/bindings/javahl/src/org/tigris/subversion/javahl/LogDate.java (original) +++ subversion/trunk/subversion/bindings/javahl/src/org/tigris/subversion/javahl/LogDate.java Fri Apr 26 19:48:34 2013 @@ -53,7 +53,11 @@ public class LogDate implements java.io. { throw new ParseException("String is not a valid Subversion date", 0); } - Date date = formatter.parse(datestr.substring(0, 23) + " UTC"); + Date date; + synchronized(formatter) + { + date = formatter.parse(datestr.substring(0, 23) + " UTC"); + } this.cachedString = datestr; cachedDate = Calendar.getInstance(UTC); cachedDate.setTime(date);
