You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@mina.apache.org by tr...@apache.org on 2007/03/14 07:46:29 UTC
svn commit: r518040 - in /mina:
branches/1.0/core/src/main/java/org/apache/mina/management/
branches/1.1/core/src/main/java/org/apache/mina/management/
trunk/core/src/main/java/org/apache/mina/management/
Author: trustin
Date: Tue Mar 13 23:46:28 2007
New Revision: 518040
URL: http://svn.apache.org/viewvc?view=rev&rev=518040
Log:
Fixed issue: StatCollector deadlocks in 1.0.2
* Fixed deadlock by using a different lock for throughput calculation
Modified:
mina/branches/1.0/core/src/main/java/org/apache/mina/management/StatCollector.java
mina/branches/1.1/core/src/main/java/org/apache/mina/management/StatCollector.java
mina/trunk/core/src/main/java/org/apache/mina/management/StatCollector.java
Modified: mina/branches/1.0/core/src/main/java/org/apache/mina/management/StatCollector.java
URL: http://svn.apache.org/viewvc/mina/branches/1.0/core/src/main/java/org/apache/mina/management/StatCollector.java?view=diff&rev=518040&r1=518039&r2=518040
==============================================================================
--- mina/branches/1.0/core/src/main/java/org/apache/mina/management/StatCollector.java (original)
+++ mina/branches/1.0/core/src/main/java/org/apache/mina/management/StatCollector.java Tue Mar 13 23:46:28 2007
@@ -64,6 +64,7 @@
*/
private static volatile int nextId = 0;
private final int id = nextId ++;
+ private final Object calcLock = new Object();
private final IoService service;
private Worker worker;
@@ -165,6 +166,10 @@
{
synchronized (this)
{
+ if (worker == null) {
+ return;
+ }
+
service.removeListener( serviceListener );
// stop worker
@@ -187,6 +192,8 @@
session.removeAttribute(KEY);
}
polledSessions.clear();
+
+ worker = null;
}
}
@@ -221,7 +228,7 @@
// computing with time between polling and closing
long currentTime = System.currentTimeMillis();
- synchronized( this )
+ synchronized( calcLock )
{
bytesReadThroughput += (session.getReadBytes() - sessStat.lastByteRead) / ( ( currentTime - sessStat.lastPollingTime ) /1000f ) ;
bytesWrittenThroughput += (session.getWrittenBytes() - sessStat.lastByteWrite) / ( ( currentTime - sessStat.lastPollingTime ) /1000f ) ;
@@ -329,7 +336,7 @@
/ ( pollingInterval / 1000f );
tmpMsgWrittenThroughput += sessStat.messageWrittenThroughput;
- synchronized( StatCollector.this )
+ synchronized( calcLock )
{
msgWrittenThroughput = tmpMsgWrittenThroughput;
msgReadThroughput = tmpMsgReadThroughput;
Modified: mina/branches/1.1/core/src/main/java/org/apache/mina/management/StatCollector.java
URL: http://svn.apache.org/viewvc/mina/branches/1.1/core/src/main/java/org/apache/mina/management/StatCollector.java?view=diff&rev=518040&r1=518039&r2=518040
==============================================================================
--- mina/branches/1.1/core/src/main/java/org/apache/mina/management/StatCollector.java (original)
+++ mina/branches/1.1/core/src/main/java/org/apache/mina/management/StatCollector.java Tue Mar 13 23:46:28 2007
@@ -63,6 +63,7 @@
*/
private static volatile int nextId = 0;
private final int id = nextId ++;
+ private final Object calcLock = new Object();
private final IoService service;
private Worker worker;
@@ -164,6 +165,10 @@
{
synchronized (this)
{
+ if (worker == null) {
+ return;
+ }
+
service.removeListener( serviceListener );
// stop worker
@@ -186,6 +191,8 @@
session.removeAttribute(KEY);
}
polledSessions.clear();
+
+ worker = null;
}
}
@@ -220,7 +227,7 @@
// computing with time between polling and closing
long currentTime = System.currentTimeMillis();
- synchronized( this )
+ synchronized( calcLock )
{
bytesReadThroughput += (session.getReadBytes() - sessStat.lastByteRead) / ( ( currentTime - sessStat.lastPollingTime ) /1000f ) ;
bytesWrittenThroughput += (session.getWrittenBytes() - sessStat.lastByteWrite) / ( ( currentTime - sessStat.lastPollingTime ) /1000f ) ;
@@ -328,7 +335,7 @@
/ ( pollingInterval / 1000f );
tmpMsgWrittenThroughput += sessStat.messageWrittenThroughput;
- synchronized( StatCollector.this )
+ synchronized( calcLock )
{
msgWrittenThroughput = tmpMsgWrittenThroughput;
msgReadThroughput = tmpMsgReadThroughput;
Modified: mina/trunk/core/src/main/java/org/apache/mina/management/StatCollector.java
URL: http://svn.apache.org/viewvc/mina/trunk/core/src/main/java/org/apache/mina/management/StatCollector.java?view=diff&rev=518040&r1=518039&r2=518040
==============================================================================
--- mina/trunk/core/src/main/java/org/apache/mina/management/StatCollector.java (original)
+++ mina/trunk/core/src/main/java/org/apache/mina/management/StatCollector.java Tue Mar 13 23:46:28 2007
@@ -60,6 +60,7 @@
*/
private static volatile int nextId = 0;
private final int id = nextId ++;
+ private final Object calcLock = new Object();
private final IoService service;
private Worker worker;
@@ -153,6 +154,10 @@
{
synchronized (this)
{
+ if (worker == null) {
+ return;
+ }
+
service.removeListener( serviceListener );
// stop worker
@@ -175,6 +180,8 @@
session.removeAttribute(KEY);
}
polledSessions.clear();
+
+ worker = null;
}
}
@@ -209,7 +216,7 @@
// computing with time between polling and closing
long currentTime = System.currentTimeMillis();
- synchronized( this )
+ synchronized( calcLock )
{
bytesReadThroughput += (session.getReadBytes() - sessStat.lastByteRead) / ( ( currentTime - sessStat.lastPollingTime ) /1000f ) ;
bytesWrittenThroughput += (session.getWrittenBytes() - sessStat.lastByteWrite) / ( ( currentTime - sessStat.lastPollingTime ) /1000f ) ;
@@ -317,7 +324,7 @@
/ ( pollingInterval / 1000f );
tmpMsgWrittenThroughput += sessStat.messageWrittenThroughput;
- synchronized( StatCollector.this )
+ synchronized( calcLock )
{
msgWrittenThroughput = tmpMsgWrittenThroughput;
msgReadThroughput = tmpMsgReadThroughput;