You are viewing a plain text version of this content. The canonical link for it is here.
Posted to server-dev@james.apache.org by no...@apache.org on 2006/08/02 21:18:43 UTC
svn commit: r428097 - in /james/server:
branches/v2.3/src/java/org/apache/james/smtpserver/
trunk/src/java/org/apache/james/smtpserver/
trunk/src/java/org/apache/james/smtpserver/core/
Author: noel
Date: Wed Aug 2 12:18:42 2006
New Revision: 428097
URL: http://svn.apache.org/viewvc?rev=428097&view=rev
Log:
Fix for JAMES-585. Explicit cleanup for temporary files when exceptions occur.
Modified:
james/server/branches/v2.3/src/java/org/apache/james/smtpserver/DataCmdHandler.java
james/server/branches/v2.3/src/java/org/apache/james/smtpserver/SMTPHandler.java
james/server/trunk/src/java/org/apache/james/smtpserver/SMTPHandler.java
james/server/trunk/src/java/org/apache/james/smtpserver/core/DataCmdHandler.java
Modified: james/server/branches/v2.3/src/java/org/apache/james/smtpserver/DataCmdHandler.java
URL: http://svn.apache.org/viewvc/james/server/branches/v2.3/src/java/org/apache/james/smtpserver/DataCmdHandler.java?rev=428097&r1=428096&r2=428097&view=diff
==============================================================================
--- james/server/branches/v2.3/src/java/org/apache/james/smtpserver/DataCmdHandler.java (original)
+++ james/server/branches/v2.3/src/java/org/apache/james/smtpserver/DataCmdHandler.java Wed Aug 2 12:18:42 2006
@@ -278,6 +278,23 @@
mail.setAttribute(SMTP_AUTH_USER_ATTRIBUTE_NAME, session.getUser());
}
session.setMail(mail);
+ } catch (MessagingException me) {
+ // if we get here, it means that we received a
+ // MessagingException, which would happen BEFORE we call
+ // session.setMail, so the mail object is still strictly
+ // local to us, and we really should clean it up before
+ // re-throwing the MessagingException for our call chain
+ // to process.
+ //
+ // So why has this worked at all so far? Initial
+ // conjecture is that it has depended upon finalize to
+ // call dispose. Not in the MailImpl, which doesn't have
+ // one, but even further down in the MimeMessageInputStreamSource.
+
+ if (mail != null) {
+ mail.dispose();
+ }
+ throw me;
} finally {
if (recipientCollection != null) {
recipientCollection.clear();
Modified: james/server/branches/v2.3/src/java/org/apache/james/smtpserver/SMTPHandler.java
URL: http://svn.apache.org/viewvc/james/server/branches/v2.3/src/java/org/apache/james/smtpserver/SMTPHandler.java?rev=428097&r1=428096&r2=428097&view=diff
==============================================================================
--- james/server/branches/v2.3/src/java/org/apache/james/smtpserver/SMTPHandler.java (original)
+++ james/server/branches/v2.3/src/java/org/apache/james/smtpserver/SMTPHandler.java Wed Aug 2 12:18:42 2006
@@ -400,36 +400,37 @@
//handle messages
if(mode == MESSAGE_RECEIVED_MODE) {
- getLogger().debug("executing message handlers");
- List messageHandlers = handlerChain.getMessageHandlers();
- int count = messageHandlers.size();
- for(int i =0; i < count; i++) {
- ((MessageHandler)messageHandlers.get(i)).onMessage(this);
- //if the response is received, stop processing of command handlers
- if(mode == MESSAGE_ABORT_MODE) {
- break;
+ try {
+ getLogger().debug("executing message handlers");
+ List messageHandlers = handlerChain.getMessageHandlers();
+ int count = messageHandlers.size();
+ for(int i =0; i < count; i++) {
+ ((MessageHandler)messageHandlers.get(i)).onMessage(this);
+ //if the response is received, stop processing of command handlers
+ if(mode == MESSAGE_ABORT_MODE) {
+ break;
+ }
}
- }
- }
-
- //do the clean up
- if(mail != null) {
- if (mail instanceof Disposable) {
- ((Disposable) mail).dispose();
- }
+ } finally {
+ //do the clean up
+ if(mail != null) {
+ if (mail instanceof Disposable) {
+ ((Disposable) mail).dispose();
+ }
- // remember the ehlo mode
- Object currentHeloMode = state.get(CURRENT_HELO_MODE);
+ // remember the ehlo mode
+ Object currentHeloMode = state.get(CURRENT_HELO_MODE);
- mail = null;
- resetState();
+ mail = null;
+ resetState();
- // start again with the old helo mode
- if (currentHeloMode != null) {
- state.put(CURRENT_HELO_MODE,currentHeloMode);
+ // start again with the old helo mode
+ if (currentHeloMode != null) {
+ state.put(CURRENT_HELO_MODE,currentHeloMode);
+ }
+ }
}
}
-
}
theWatchdog.stop();
getLogger().debug("Closing socket.");
Modified: james/server/trunk/src/java/org/apache/james/smtpserver/SMTPHandler.java
URL: http://svn.apache.org/viewvc/james/server/trunk/src/java/org/apache/james/smtpserver/SMTPHandler.java?rev=428097&r1=428096&r2=428097&view=diff
==============================================================================
--- james/server/trunk/src/java/org/apache/james/smtpserver/SMTPHandler.java (original)
+++ james/server/trunk/src/java/org/apache/james/smtpserver/SMTPHandler.java Wed Aug 2 12:18:42 2006
@@ -287,34 +287,35 @@
//handle messages
if(mode == MESSAGE_RECEIVED_MODE) {
- getLogger().debug("executing message handlers");
- List messageHandlers = handlerChain.getMessageHandlers();
- int count = messageHandlers.size();
- for(int i =0; i < count; i++) {
- ((MessageHandler)messageHandlers.get(i)).onMessage(this);
- //if the response is received, stop processing of command handlers
- if(mode == MESSAGE_ABORT_MODE) {
- break;
+ try {
+ getLogger().debug("executing message handlers");
+ List messageHandlers = handlerChain.getMessageHandlers();
+ int count = messageHandlers.size();
+ for(int i =0; i < count; i++) {
+ ((MessageHandler)messageHandlers.get(i)).onMessage(this);
+ //if the response is received, stop processing of command handlers
+ if(mode == MESSAGE_ABORT_MODE) {
+ break;
+ }
}
- }
- }
-
- //do the clean up
- if(mail != null) {
- ContainerUtil.dispose(mail);
+ } finally {
+ //do the clean up
+ if(mail != null) {
+ ContainerUtil.dispose(mail);
- // remember the ehlo mode
- Object currentHeloMode = state.get(CURRENT_HELO_MODE);
+ // remember the ehlo mode
+ Object currentHeloMode = state.get(CURRENT_HELO_MODE);
- mail = null;
- resetState();
+ mail = null;
+ resetState();
- // start again with the old helo mode
- if (currentHeloMode != null) {
- state.put(CURRENT_HELO_MODE,currentHeloMode);
+ // start again with the old helo mode
+ if (currentHeloMode != null) {
+ state.put(CURRENT_HELO_MODE,currentHeloMode);
+ }
+ }
}
}
-
}
theWatchdog.stop();
getLogger().debug("Closing socket.");
Modified: james/server/trunk/src/java/org/apache/james/smtpserver/core/DataCmdHandler.java
URL: http://svn.apache.org/viewvc/james/server/trunk/src/java/org/apache/james/smtpserver/core/DataCmdHandler.java?rev=428097&r1=428096&r2=428097&view=diff
==============================================================================
--- james/server/trunk/src/java/org/apache/james/smtpserver/core/DataCmdHandler.java (original)
+++ james/server/trunk/src/java/org/apache/james/smtpserver/core/DataCmdHandler.java Wed Aug 2 12:18:42 2006
@@ -290,6 +290,23 @@
}
session.setMail(mail);
+ } catch (MessagingException me) {
+ // if we get here, it means that we received a
+ // MessagingException, which would happen BEFORE we call
+ // session.setMail, so the mail object is still strictly
+ // local to us, and we really should clean it up before
+ // re-throwing the MessagingException for our call chain
+ // to process.
+ //
+ // So why has this worked at all so far? Initial
+ // conjecture is that it has depended upon finalize to
+ // call dispose. Not in the MailImpl, which doesn't have
+ // one, but even further down in the MimeMessageInputStreamSource.
+
+ if (mail != null) {
+ mail.dispose();
+ }
+ throw me;
} finally {
if (recipientCollection != null) {
recipientCollection.clear();
---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org