fix(delivery): prevent throttle reset timer from firing after stop and avoid scheduling duplicate timers

This commit is contained in:
2026-02-26 16:58:06 +00:00
parent cda2c06087
commit 71a0ec3202
3 changed files with 21 additions and 3 deletions

View File

@@ -3,6 +3,6 @@
*/
export const commitinfo = {
name: '@push.rocks/smartmta',
version: '5.2.2',
version: '5.2.3',
description: 'A high-performance, enterprise-grade Mail Transfer Agent (MTA) built from scratch in TypeScript with Rust acceleration.'
}

View File

@@ -108,6 +108,7 @@ export class MultiModeDeliverySystem extends EventEmitter {
private activeDeliveries: Set<string> = new Set();
private running: boolean = false;
private throttled: boolean = false;
private throttleResetTimer: ReturnType<typeof setTimeout> | null = null;
private rateLimitLastCheck: number = Date.now();
private rateLimitCounter: number = 0;
private emailServer?: UnifiedEmailServer;
@@ -211,7 +212,13 @@ export class MultiModeDeliverySystem extends EventEmitter {
}
this.running = false;
// Clear throttle reset timer to prevent it firing after stop
if (this.throttleResetTimer) {
clearTimeout(this.throttleResetTimer);
this.throttleResetTimer = null;
}
// Wait for active deliveries to complete
if (this.activeDeliveries.size > 0) {
logger.log('info', `Waiting for ${this.activeDeliveries.size} active deliveries to complete`);
@@ -776,7 +783,11 @@ export class MultiModeDeliverySystem extends EventEmitter {
// Schedule throttle reset
const resetDelay = 60000 - elapsed;
setTimeout(() => {
if (this.throttleResetTimer) {
clearTimeout(this.throttleResetTimer);
}
this.throttleResetTimer = setTimeout(() => {
this.throttleResetTimer = null;
this.throttled = false;
this.rateLimitLastCheck = Date.now();
this.rateLimitCounter = 0;