SMPC: when aborting because of to many outbound job free the aborted message in the...
[citadel.git] / citadel / modules / smtp / serv_smtpqueue.c
index b56f40301d4e826c1774ba58a667356b877b0e49..c128fd49026fe728627dbe8d147b4fb4b3959bdb 100644 (file)
@@ -194,7 +194,7 @@ void FreeMailQEntry(void *qv)
 */
        FreeStrBuf(&Q->Recipient);
        FreeStrBuf(&Q->StatusMessage);
-
+       FreeStrBuf(&Q->AllStatusMessages);
        memset(Q, 0, sizeof(MailQEntry));
        free(Q);
 }
@@ -385,7 +385,10 @@ StrBuf *SerializeQueueItem(OneQueItem *MyQItem)
                StrBufAppendBufPlain(QMessage, HKEY("|"), 0);
                StrBufAppendPrintf(QMessage, "%d", ThisItem->Status);
                StrBufAppendBufPlain(QMessage, HKEY("|"), 0);
-               StrBufAppendBuf(QMessage, ThisItem->StatusMessage, 0);
+               if (ThisItem->AllStatusMessages != NULL)
+                       StrBufAppendBuf(QMessage, ThisItem->AllStatusMessages, 0);
+               else
+                       StrBufAppendBuf(QMessage, ThisItem->StatusMessage, 0);
        }
        DeleteHashPos(&It);
        StrBufAppendBufPlain(QMessage, HKEY("\n"), 0);
@@ -826,7 +829,7 @@ void smtp_do_procmsg(long msgnum, void *userdata) {
        StrBuf *Msg =NULL;
 
        if (mynumsessions > max_sessions_for_outbound_smtp) {
-               SMTPC_syslog(LOG_DEBUG,
+               SMTPC_syslog(LOG_INFO,
                             "skipping because of num jobs %d > %d max_sessions_for_outbound_smtp",
                             mynumsessions,
                             max_sessions_for_outbound_smtp);
@@ -937,13 +940,23 @@ void smtp_do_procmsg(long msgnum, void *userdata) {
            (((MyQItem->ActiveDeliveries * 2)  < max_sessions_for_outbound_smtp)))
        {
                /* abort delivery for another time. */
-               SMTPC_syslog(LOG_DEBUG,
+               SMTPC_syslog(LOG_INFO,
                             "SMTP Queue: skipping because of num jobs %d + %ld > %d max_sessions_for_outbound_smtp",
                             mynumsessions,
                             MyQItem->ActiveDeliveries,
                             max_sessions_for_outbound_smtp);
 
-               FreeQueItem(&MyQItem);
+               It = GetNewHashPos(MyQItem->MailQEntries, 0);
+               pthread_mutex_lock(&ActiveQItemsLock);
+               {
+                       if (GetHashPosFromKey(ActiveQItems,
+                                             LKEY(MyQItem->MessageID),
+                                             It))
+                       {
+                               DeleteEntryFromHash(ActiveQItems, It);
+                       }
+               }
+               pthread_mutex_unlock(&ActiveQItemsLock);
 
                return;
        }