Author: nick
Date: Fri Feb 17 12:24:33 2012
New Revision: 1245426

URL: http://svn.apache.org/viewvc?rev=1245426&view=rev
Log:
TIKA-865 Reduce the amount of MimeTypes.forName that needs to be synchronized

Modified:
    tika/trunk/tika-core/src/main/java/org/apache/tika/mime/MimeTypes.java

Modified: tika/trunk/tika-core/src/main/java/org/apache/tika/mime/MimeTypes.java
URL: 
http://svn.apache.org/viewvc/tika/trunk/tika-core/src/main/java/org/apache/tika/mime/MimeTypes.java?rev=1245426&r1=1245425&r2=1245426&view=diff
==============================================================================
--- tika/trunk/tika-core/src/main/java/org/apache/tika/mime/MimeTypes.java 
(original)
+++ tika/trunk/tika-core/src/main/java/org/apache/tika/mime/MimeTypes.java Fri 
Feb 17 12:24:33 2012
@@ -262,15 +262,23 @@ public final class MimeTypes implements 
      * @return the registered media type with the given name or alias
      * @throws MimeTypeException if the given media type name is invalid
      */
-    public synchronized MimeType forName(String name)
-            throws MimeTypeException {
+    public MimeType forName(String name) throws MimeTypeException {
         MediaType type = MediaType.parse(name);
         if (type != null) {
-            MimeType mime = types.get(registry.normalize(type));
+            MediaType normalisedType = registry.normalize(type);
+            MimeType mime = types.get(normalisedType);
+            
             if (mime == null) {
-                mime = new MimeType(type);
-                add(mime);
-                types.put(type, mime);
+                synchronized (types) {
+                   // Double check it didn't already get added while 
+                   //  we were waiting for the lock
+                   mime = types.get(normalisedType);
+                   if (mime == null) {
+                      mime = new MimeType(type);
+                      add(mime);
+                      types.put(type, mime);
+                   }
+                }
             }
             return mime;
         } else {


Reply via email to