Msg->IDestructQueItem = DecreaseQReference(Msg->MyQItem);
- Msg->nRemain = CountActiveQueueEntries(Msg->MyQItem);
+ Msg->nRemain = CountActiveQueueEntries(Msg->MyQItem, 0);
if (Msg->MyQEntry->Active &&
+ !Msg->MyQEntry->StillActive &&
CheckQEntryIsBounce(Msg->MyQEntry))
{
/* are we casue for a bounce mail? */
return 0;
}
-int CountActiveQueueEntries(OneQueItem *MyQItem)
+int CountActiveQueueEntries(OneQueItem *MyQItem, int before)
{
HashPos *It;
long len;
It = GetNewHashPos(MyQItem->MailQEntries, 0);
while (GetNextHashPos(MyQItem->MailQEntries, It, &len, &Key, &vQE))
{
+ int Active;
MailQEntry *ThisItem = vQE;
if (CheckQEntryActive(ThisItem))
{
ActiveDeliveries++;
- ThisItem->Active = 1;
+ Active = 1;
}
else
- ThisItem->Active = 0;
+ Active = 0;
+ if (before)
+ ThisItem->Active = Active;
+ else
+ ThisItem->StillActive = Active;
}
DeleteHashPos(&It);
return ActiveDeliveries;
DeleteHashPos(&It);
MyQItem->NotYetShutdownDeliveries =
- MyQItem->ActiveDeliveries = CountActiveQueueEntries(MyQItem);
+ MyQItem->ActiveDeliveries = CountActiveQueueEntries(MyQItem, 1);
/* failsafe against overload:
* will we exceed the limit set?
int n;
int Active;
+ int StillActive;
}MailQEntry;
typedef struct queueitem {
void DecreaseShutdownDeliveries(OneQueItem *MyQItem);
int GetShutdownDeliveries(OneQueItem *MyQItem);
void RemoveQItem(OneQueItem *MyQItem);
-int CountActiveQueueEntries(OneQueItem *MyQItem);
+int CountActiveQueueEntries(OneQueItem *MyQItem, int before);
StrBuf *SerializeQueueItem(OneQueItem *MyQItem);
void smtpq_do_bounce(OneQueItem *MyQItem, StrBuf *OMsgTxt);