From 9d9bd40fb67d65bc99b142f66128b3ad07e63330 Mon Sep 17 00:00:00 2001 From: Tom Tromey Date: Tue, 17 May 2005 01:52:02 +0000 Subject: [PATCH] Charset.java (encode, decode): Synchronize on 'this', not the class. * java/nio/charset/Charset.java (encode, decode): Synchronize on 'this', not the class. From-SVN: r99810 --- libjava/ChangeLog | 5 +++ libjava/java/nio/charset/Charset.java | 58 ++++++++++++--------------- 2 files changed, 31 insertions(+), 32 deletions(-) diff --git a/libjava/ChangeLog b/libjava/ChangeLog index c6295096631..9c9e466603e 100644 --- a/libjava/ChangeLog +++ b/libjava/ChangeLog @@ -1,3 +1,8 @@ +2005-05-16 Tom Tromey + + * java/nio/charset/Charset.java (encode, decode): Synchronize on + 'this', not the class. + 2005-05-16 Tom Tromey * gnu/java/net/protocol/http/Headers.java (parse): Include final diff --git a/libjava/java/nio/charset/Charset.java b/libjava/java/nio/charset/Charset.java index d52fc9c7d21..8c6286db9ca 100644 --- a/libjava/java/nio/charset/Charset.java +++ b/libjava/java/nio/charset/Charset.java @@ -289,25 +289,22 @@ public abstract class Charset implements Comparable return true; } - public final ByteBuffer encode (CharBuffer cb) + // NB: This implementation serializes different threads calling + // Charset.encode(), a potential performance problem. It might + // be better to remove the cache, or use ThreadLocal to cache on + // a per-thread basis. + public final synchronized ByteBuffer encode (CharBuffer cb) { try { - // NB: This implementation serializes different threads calling - // Charset.encode(), a potential performance problem. It might - // be better to remove the cache, or use ThreadLocal to cache on - // a per-thread basis. - synchronized (Charset.class) - { - if (cachedEncoder == null) - { - cachedEncoder = newEncoder () - .onMalformedInput (CodingErrorAction.REPLACE) - .onUnmappableCharacter (CodingErrorAction.REPLACE); - } else - cachedEncoder.reset(); - return cachedEncoder.encode (cb); - } + if (cachedEncoder == null) + { + cachedEncoder = newEncoder () + .onMalformedInput (CodingErrorAction.REPLACE) + .onUnmappableCharacter (CodingErrorAction.REPLACE); + } else + cachedEncoder.reset(); + return cachedEncoder.encode (cb); } catch (CharacterCodingException e) { @@ -320,26 +317,23 @@ public abstract class Charset implements Comparable return encode (CharBuffer.wrap (str)); } - public final CharBuffer decode (ByteBuffer bb) + // NB: This implementation serializes different threads calling + // Charset.decode(), a potential performance problem. It might + // be better to remove the cache, or use ThreadLocal to cache on + // a per-thread basis. + public final synchronized CharBuffer decode (ByteBuffer bb) { try { - // NB: This implementation serializes different threads calling - // Charset.decode(), a potential performance problem. It might - // be better to remove the cache, or use ThreadLocal to cache on - // a per-thread basis. - synchronized (Charset.class) - { - if (cachedDecoder == null) - { - cachedDecoder = newDecoder () - .onMalformedInput (CodingErrorAction.REPLACE) - .onUnmappableCharacter (CodingErrorAction.REPLACE); - } else - cachedDecoder.reset(); + if (cachedDecoder == null) + { + cachedDecoder = newDecoder () + .onMalformedInput (CodingErrorAction.REPLACE) + .onUnmappableCharacter (CodingErrorAction.REPLACE); + } else + cachedDecoder.reset(); - return cachedDecoder.decode (bb); - } + return cachedDecoder.decode (bb); } catch (CharacterCodingException e) { -- 2.30.2