Author: trustin
Date: Thu Nov 4 09:12:49 2004
New Revision: 56612
Modified:
incubator/directory/seda/trunk/src/java/org/apache/seda/decoder/DefaultDecoderManager.java
incubator/directory/seda/trunk/src/java/org/apache/seda/encoder/DefaultEncoderManager.java
incubator/directory/seda/trunk/src/java/org/apache/seda/listener/ClientKey.java
incubator/directory/seda/trunk/src/java/org/apache/seda/listener/TCPClientKey.java
incubator/directory/seda/trunk/src/java/org/apache/seda/listener/UDPClientKey.java
Log:
Fixed: EncoderManager and DecoderManager didn't clean up encoder/decoder which
is created by UDPClientKeys.
Solution: ClientKey.stateful property was added, and EM and DM creates and
forget new encoder and decoder for stateless client keys.
Modified:
incubator/directory/seda/trunk/src/java/org/apache/seda/decoder/DefaultDecoderManager.java
==============================================================================
---
incubator/directory/seda/trunk/src/java/org/apache/seda/decoder/DefaultDecoderManager.java
(original)
+++
incubator/directory/seda/trunk/src/java/org/apache/seda/decoder/DefaultDecoderManager.java
Thu Nov 4 09:12:49 2004
@@ -215,15 +215,21 @@
*/
StatefulDecoder getDecoder(ClientKey key)
{
- StatefulDecoder decoder = (StatefulDecoder) decoders.get(key);
- if (decoder == null) {
- synchronized (decoders) {
- decoder = (StatefulDecoder) decoders.get(key);
- if (decoder == null) {
- decoder = createClientDecoder(key);
- decoders.put(key, decoder);
- }
- }
+ StatefulDecoder decoder;
+
+ if (key.isStateful()) {
+ decoder = (StatefulDecoder) decoders.get(key);
+ if (decoder == null) {
+ synchronized (decoders) {
+ decoder = (StatefulDecoder) decoders.get(key);
+ if (decoder == null) {
+ decoder = createClientDecoder(key);
+ decoders.put(key, decoder);
+ }
+ }
+ }
+ } else {
+ decoder = (StatefulDecoder) decoders.get(key);
}
return decoder;
Modified:
incubator/directory/seda/trunk/src/java/org/apache/seda/encoder/DefaultEncoderManager.java
==============================================================================
---
incubator/directory/seda/trunk/src/java/org/apache/seda/encoder/DefaultEncoderManager.java
(original)
+++
incubator/directory/seda/trunk/src/java/org/apache/seda/encoder/DefaultEncoderManager.java
Thu Nov 4 09:12:49 2004
@@ -169,15 +169,20 @@
StatefulEncoder getEncoder(ClientKey key)
{
- StatefulEncoder encoder = (StatefulEncoder) encoders.get(key);
- if (encoder == null) {
- synchronized (encoders) {
- encoder = (StatefulEncoder) encoders.get(key);
- if (encoder == null) {
- encoder = createClientEncoder(key);
- encoders.put(key, encoder);
- }
- }
+ StatefulEncoder encoder;
+ if (key.isStateful()) {
+ encoder = (StatefulEncoder) encoders.get(key);
+ if (encoder == null) {
+ synchronized (encoders) {
+ encoder = (StatefulEncoder) encoders.get(key);
+ if (encoder == null) {
+ encoder = createClientEncoder(key);
+ encoders.put(key, encoder);
+ }
+ }
+ }
+ } else {
+ encoder = (StatefulEncoder) encoders.get(key);
}
return encoder;
Modified:
incubator/directory/seda/trunk/src/java/org/apache/seda/listener/ClientKey.java
==============================================================================
---
incubator/directory/seda/trunk/src/java/org/apache/seda/listener/ClientKey.java
(original)
+++
incubator/directory/seda/trunk/src/java/org/apache/seda/listener/ClientKey.java
Thu Nov 4 09:12:49 2004
@@ -20,6 +20,7 @@
import java.io.IOException;
import java.net.InetSocketAddress;
+
import java.util.Observable;
@@ -50,9 +51,10 @@
/** Unique key or client id */
private final String clientId;
+ private final boolean stateful;
private final InetSocketAddress localAddress;
private final InetSocketAddress remoteAddress;
-
+
// ----------------------------------------------
// Constructors
// ----------------------------------------------
@@ -70,11 +72,13 @@
*
* @param clientId the id of this client key
*/
- ClientKey(String clientId, InetSocketAddress localAddress,
InetSocketAddress remoteAddress)
+ ClientKey(String clientId, InetSocketAddress localAddress,
+ InetSocketAddress remoteAddress, boolean stateful)
{
this.clientId = clientId;
this.localAddress = localAddress;
this.remoteAddress = remoteAddress;
+ this.stateful = stateful;
}
// ----------------------------------------------
@@ -101,8 +105,9 @@
*
* @return the local socket address
*/
- public final InetSocketAddress getLocalAddress() {
- return localAddress;
+ public final InetSocketAddress getLocalAddress()
+ {
+ return localAddress;
}
/**
@@ -110,8 +115,17 @@
*
* @return the client's socket address.
*/
- public final InetSocketAddress getRemoteAddress() {
- return remoteAddress;
+ public final InetSocketAddress getRemoteAddress()
+ {
+ return remoteAddress;
+ }
+
+ /**
+ * Returns <code>true</code> if this client channel is stateful.
+ */
+ public boolean isStateful()
+ {
+ return stateful;
}
// ----------------------------------------------
Modified:
incubator/directory/seda/trunk/src/java/org/apache/seda/listener/TCPClientKey.java
==============================================================================
---
incubator/directory/seda/trunk/src/java/org/apache/seda/listener/TCPClientKey.java
(original)
+++
incubator/directory/seda/trunk/src/java/org/apache/seda/listener/TCPClientKey.java
Thu Nov 4 09:12:49 2004
@@ -78,7 +78,7 @@
new InetSocketAddress(a_socket.getLocalAddress(),
a_socket.getLocalPort()),
new InetSocketAddress(a_socket.getInetAddress(),
- a_socket.getPort()));
+ a_socket.getPort()), true);
socket = a_socket;
}
Modified:
incubator/directory/seda/trunk/src/java/org/apache/seda/listener/UDPClientKey.java
==============================================================================
---
incubator/directory/seda/trunk/src/java/org/apache/seda/listener/UDPClientKey.java
(original)
+++
incubator/directory/seda/trunk/src/java/org/apache/seda/listener/UDPClientKey.java
Thu Nov 4 09:12:49 2004
@@ -77,7 +77,8 @@
{
super(getClientId(a_socket, clientAddress),
new InetSocketAddress(a_socket.getLocalAddress(),
- a_socket.getLocalPort()), clientAddress);
+ a_socket.getLocalPort()), clientAddress,
+ false);
socket = a_socket;
}