[Red5commits] [2223] protect access to string cache
jbauch
luke at codegent.com
Wed Jul 18 21:10:07 EDT 2007
protect access to string cache
Timestamp: 07/18/07 20:07:45 EST (less than one hour ago)
Change: 2223
Author: jbauch
Files (see diff or trac for details):
java/server/trunk/src/org/red5/io/amf/Output.java
java/server/trunk/src/org/red5/io/amf3/Output.java
Trac: http://mirror1.cvsdude.com/trac/osflash/red5/changeset/2223
Index: /java/server/trunk/src/org/red5/io/amf3/Output.java
===================================================================
--- /java/server/trunk/src/org/red5/io/amf3/Output.java (revision 2222)
+++ /java/server/trunk/src/org/red5/io/amf3/Output.java (revision 2223)
@@ -137,4 +137,20 @@
/** {@inheritDoc} */
+ protected static byte[] encodeString(String string) {
+ byte[] encoded;
+ synchronized (stringCache) {
+ encoded = stringCache.get(string);
+ }
+ if (encoded == null) {
+ final java.nio.ByteBuffer strBuf = AMF3.CHARSET.encode(string);
+ encoded = strBuf.array();
+ synchronized (stringCache) {
+ stringCache.put(string, encoded);
+ }
+ }
+ return encoded;
+ }
+
+ /** {@inheritDoc} */
protected void putString(String str, byte[] encoded) {
final int len = encoded.length;
@@ -160,10 +176,5 @@
}
- byte[] encoded = stringCache.get(string);
- if (encoded == null) {
- final java.nio.ByteBuffer strBuf = AMF3.CHARSET.encode(string);
- encoded = strBuf.array();
- stringCache.put(string, encoded);
- }
+ final byte[] encoded = encodeString(string);
putString(string, encoded);
}
@@ -190,10 +201,5 @@
putInteger(1);
} else {
- byte[] encoded = stringCache.get(string);
- if (encoded == null) {
- final java.nio.ByteBuffer strBuf = AMF3.CHARSET.encode(string);
- encoded = strBuf.array();
- stringCache.put(string, encoded);
- }
+ final byte[] encoded = encodeString(string);
putString(string, encoded);
}
Index: /java/server/trunk/src/org/red5/io/amf/Output.java
===================================================================
--- /java/server/trunk/src/org/red5/io/amf/Output.java (revision 2222)
+++ /java/server/trunk/src/org/red5/io/amf/Output.java (revision 2223)
@@ -25,4 +25,5 @@
import java.lang.reflect.Modifier;
import java.util.Collection;
+import java.util.Collections;
import java.util.Date;
import java.util.HashMap;
@@ -54,5 +55,5 @@
* Cache encoded strings.
*/
- protected static Map<String, byte[]> stringCache = new LRUMap(10000);
+ protected static Map<String, byte[]> stringCache = new LRUMap(10000, true);
/**
@@ -404,10 +405,5 @@
/** {@inheritDoc} */
public void writeString(String string) {
- byte[] encoded = stringCache.get(string);
- if (encoded == null) {
- final java.nio.ByteBuffer strBuf = AMF.CHARSET.encode(string);
- encoded = strBuf.array();
- stringCache.put(string, encoded);
- }
+ final byte[] encoded = encodeString(string);
final int len = encoded.length;
if (len < AMF.LONG_STRING_LENGTH) {
@@ -422,4 +418,25 @@
/**
+ * Return encoded string.
+ *
+ * @param string
+ * @return
+ */
+ protected static byte[] encodeString(String string) {
+ byte[] encoded;
+ synchronized (stringCache) {
+ encoded = stringCache.get(string);
+ }
+ if (encoded == null) {
+ final java.nio.ByteBuffer strBuf = AMF.CHARSET.encode(string);
+ encoded = strBuf.array();
+ synchronized (stringCache) {
+ stringCache.put(string, encoded);
+ }
+ }
+ return encoded;
+ }
+
+ /**
* Write out string
* @param buf Byte buffer to write to
@@ -427,10 +444,5 @@
*/
public static void putString(ByteBuffer buf, String string) {
- byte[] encoded = stringCache.get(string);
- if (encoded == null) {
- final java.nio.ByteBuffer strBuf = AMF.CHARSET.encode(string);
- encoded = strBuf.array();
- stringCache.put(string, encoded);
- }
+ final byte[] encoded = encodeString(string);
buf.putShort((short) encoded.length);
buf.put(encoded);
Note:
Diffs are chopped if more than 25k.
This is to get past the limit on the mailing list.
More information about the Red5commits
mailing list