SMTP-Client: make shure everything is finished before we terminate one client.
[citadel.git] / citadel / modules / smtp / serv_smtpeventclient.c
index e5c1cee00931f84c887addfcbdb51002b8eab444..c8da5590e63b62841f30a3cfccf81331957679bc 100644 (file)
@@ -126,6 +126,7 @@ eNextState FinalizeMessageSendDB(AsyncIO *IO);
 eNextState FinalizeMessageSend_DB1(AsyncIO *IO);
 eNextState FinalizeMessageSend_DB2(AsyncIO *IO);
 eNextState FinalizeMessageSend_DB3(AsyncIO *IO);
+eNextState FinalizeMessageSend_DB4(AsyncIO *IO);
 
 /******************************************************************************
  * So, we're finished with sending (regardless of success or failure)         *
@@ -217,11 +218,27 @@ inline void FinalizeMessageSend_DB_3(AsyncIO *IO)
                                   "");
                FreeStrBuf(&Msg->QMsgData);
        }
+       DecreaseShutdownDeliveries(Msg->MyQItem);
 }
 eNextState FinalizeMessageSend_DB3(AsyncIO *IO)
 {
+       SmtpOutMsg *Msg = IO->Data;
        FinalizeMessageSend_DB_3(IO);
-       return eAbort;
+       if (!Msg->IDestructQueItem)
+               return eAbort;
+       return NextDBOperation(IO, FinalizeMessageSend_DB4);
+}
+
+eNextState FinalizeMessageSend_DB4(AsyncIO *IO)
+{
+       int n;
+       SmtpOutMsg *Msg = IO->Data;
+
+       n = GetShutdownDeliveries(Msg->MyQItem);
+       if (n > 0) 
+               return NextDBOperation(IO, FinalizeMessageSend_DB4);
+       else
+               return eAbort;
 }
 
 eNextState FinalizeMessageSend_DB(AsyncIO *IO)