Author: robert
Date: 2008-01-09 16:47:15 +0000 (Wed, 09 Jan 2008)
New Revision: 16983
Modified:
trunk/freenet/src/freenet/node/NodeClientCore.java
trunk/freenet/src/freenet/node/RequestHandler.java
trunk/freenet/src/freenet/node/RequestSender.java
Log:
add timeout to waitUntilStatusChange to free RequestHandler thread if obsolete
Modified: trunk/freenet/src/freenet/node/NodeClientCore.java
===================================================================
--- trunk/freenet/src/freenet/node/NodeClientCore.java 2008-01-09 16:27:26 UTC
(rev 16982)
+++ trunk/freenet/src/freenet/node/NodeClientCore.java 2008-01-09 16:47:15 UTC
(rev 16983)
@@ -465,7 +465,7 @@
boolean rejectedOverload = false;
short waitStatus = 0;
while(true) {
- waitStatus = rs.waitUntilStatusChange(waitStatus);
+ waitStatus = rs.waitUntilStatusChange(waitStatus,
120000);
if((!rejectedOverload) && (waitStatus &
RequestSender.WAIT_REJECTED_OVERLOAD) != 0) {
// See below; inserts count both
requestStarters.rejectedOverload(false, false);
@@ -578,7 +578,7 @@
boolean rejectedOverload = false;
short waitStatus = 0;
while(true) {
- waitStatus = rs.waitUntilStatusChange(waitStatus);
+ waitStatus = rs.waitUntilStatusChange(waitStatus,
120000);
if((!rejectedOverload) && (waitStatus &
RequestSender.WAIT_REJECTED_OVERLOAD) != 0) {
requestStarters.rejectedOverload(true, false);
rejectedOverload = true;
Modified: trunk/freenet/src/freenet/node/RequestHandler.java
===================================================================
--- trunk/freenet/src/freenet/node/RequestHandler.java 2008-01-09 16:27:26 UTC
(rev 16982)
+++ trunk/freenet/src/freenet/node/RequestHandler.java 2008-01-09 16:47:15 UTC
(rev 16983)
@@ -158,9 +158,9 @@
while(true) {
- waitStatus = rs.waitUntilStatusChange(waitStatus);
+ waitStatus = rs.waitUntilStatusChange(waitStatus,
responseDeadline-System.currentTimeMillis());
- if (System.currentTimeMillis() > responseDeadline) {
+ if (System.currentTimeMillis() >= responseDeadline) {
applyByteCounts();
return;
}
Modified: trunk/freenet/src/freenet/node/RequestSender.java
===================================================================
--- trunk/freenet/src/freenet/node/RequestSender.java 2008-01-09 16:27:26 UTC
(rev 16982)
+++ trunk/freenet/src/freenet/node/RequestSender.java 2008-01-09 16:47:15 UTC
(rev 16983)
@@ -641,8 +641,9 @@
* @return Bitmask indicating present situation. Can be fed back to this
function,
* if nonzero.
*/
- public synchronized short waitUntilStatusChange(short mask) {
+ public synchronized short waitUntilStatusChange(short mask, long timeout) {
if(mask == WAIT_ALL) throw new IllegalArgumentException("Cannot ignore
all!");
+ long startTime=System.currentTimeMillis();
while(true) {
short current = mask; // If any bits are set already, we ignore
those states.
@@ -657,8 +658,16 @@
if(current != mask) return current;
+ long timeLeft = System.currentTimeMillis() -
(startTime+timeout);
+
+ if (timeLeft <= 0) {
+ Logger.normal(this,
"RequestSender.waitUntilStatusChange timed out");
+ return current;
+ }
+
try {
- wait(10000);
+ //Wait at most ten seconds per-loop
+ wait(Math.min(timeLeft, 10000));
} catch (InterruptedException e) {
// Ignore
}