6967684: httpserver using a non thread-safe SimpleDateFormat
Reviewed-by: michaelm
--- a/jdk/src/share/classes/sun/net/httpserver/ExchangeImpl.java Mon Jul 12 18:13:40 2010 +0100
+++ b/jdk/src/share/classes/sun/net/httpserver/ExchangeImpl.java Mon Jul 12 18:16:35 2010 +0100
@@ -52,14 +52,16 @@
boolean http10 = false;
/* for formatting the Date: header */
- static TimeZone tz;
- static DateFormat df;
- static {
- String pattern = "EEE, dd MMM yyyy HH:mm:ss zzz";
- tz = TimeZone.getTimeZone ("GMT");
- df = new SimpleDateFormat (pattern, Locale.US);
- df.setTimeZone (tz);
- }
+ private static final String pattern = "EEE, dd MMM yyyy HH:mm:ss zzz";
+ private static final TimeZone gmtTZ = TimeZone.getTimeZone("GMT");
+ private static final ThreadLocal<DateFormat> dateFormat =
+ new ThreadLocal<DateFormat>() {
+ @Override protected DateFormat initialValue() {
+ DateFormat df = new SimpleDateFormat(pattern, Locale.US);
+ df.setTimeZone(gmtTZ);
+ return df;
+ }
+ };
private static final String HEAD = "HEAD";
@@ -206,7 +208,7 @@
PlaceholderOutputStream o = getPlaceholderResponseBody();
tmpout.write (bytes(statusLine, 0), 0, statusLine.length());
boolean noContentToSend = false; // assume there is content
- rspHdrs.set ("Date", df.format (new Date()));
+ rspHdrs.set ("Date", dateFormat.get().format (new Date()));
/* check for response type that is not allowed to send a body */