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 {