Author: bago
Date: Fri May 19 07:58:12 2006
New Revision: 407813
URL: http://svn.apache.org/viewvc?rev=407813&view=rev
Log:
Backport remotedelivery fixes: ArrayIndexOutOfBounds and missing unlock
(JAMES-489 and JAMES-504)
Modified:
james/server/branches/v2.3/src/java/org/apache/james/transport/mailets/RemoteDelivery.java
Modified:
james/server/branches/v2.3/src/java/org/apache/james/transport/mailets/RemoteDelivery.java
URL:
http://svn.apache.org/viewvc/james/server/branches/v2.3/src/java/org/apache/james/transport/mailets/RemoteDelivery.java?rev=407813&r1=407812&r2=407813&view=diff
==============================================================================
---
james/server/branches/v2.3/src/java/org/apache/james/transport/mailets/RemoteDelivery.java
(original)
+++
james/server/branches/v2.3/src/java/org/apache/james/transport/mailets/RemoteDelivery.java
Fri May 19 07:58:12 2006
@@ -155,6 +155,10 @@
if (state.equals(Mail.ERROR)) {
//Test the time...
int retries = Integer.parseInt(errorMessage);
+
+ // If the retries count is 0 we should try to send the mail
now!
+ if (retries == 0) return true;
+
long delay = getNextDelay (retries);
long timeToProcess = delay + lastUpdated;
@@ -1085,7 +1089,7 @@
Session session = Session.getInstance(props, null);
try {
- while (!Thread.currentThread().interrupted() && !destroyed) {
+ while (!Thread.interrupted() && !destroyed) {
try {
Mail mail = (Mail)outgoing.accept(delayFilter);
String key = mail.getName();
@@ -1104,6 +1108,13 @@
} else {
//Something happened that will delay delivery.
Store any updates
outgoing.store(mail);
+ // This is an update, we have to unlock and notify
or this mail
+ // is kept locked by this thread
+ outgoing.unlock(key);
+ // We do not notify because we updated an already
existing mail
+ // and we are now free to handle more mails.
+ // Furthermore this mail should not be processed
now because we
+ // have a retry time scheduling.
}
//Clear the object handle to make sure it recycles
this object.
mail = null;
@@ -1122,7 +1133,7 @@
}
} finally {
// Restore the thread state to non-interrupted.
- Thread.currentThread().interrupted();
+ Thread.interrupted();
}
}
@@ -1172,7 +1183,7 @@
private long getNextDelay (int retry_count) {
if (retry_count > delayTimes.length) {
return DEFAULT_DELAY_TIME;
- }
+ }
return delayTimes[retry_count-1];
}
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]