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);


Reply via email to