Skip to content

Commit 83caf25

Browse files
fix(msteams): block provider promise until abort signal fires
The msteams provider returned immediately after starting the Express server. The channel manager in server-channels.ts treats promise resolution as "provider stopped" and triggers auto-restart with exponential backoff, causing an infinite restart loop. Add the same blocking pattern used by the Slack provider: await a promise that only resolves when the abort signal fires. Also add { once: true } to the existing abort listener to prevent leaks. Closes #27885 Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
1 parent 80d44c9 commit 83caf25

1 file changed

Lines changed: 17 additions & 3 deletions

File tree

extensions/msteams/src/monitor.ts

Lines changed: 17 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -296,10 +296,24 @@ export async function monitorMSTeamsProvider(
296296

297297
// Handle abort signal
298298
if (opts.abortSignal) {
299-
opts.abortSignal.addEventListener("abort", () => {
300-
void shutdown();
301-
});
299+
opts.abortSignal.addEventListener(
300+
"abort",
301+
() => {
302+
void shutdown();
303+
},
304+
{ once: true },
305+
);
302306
}
303307

308+
// Block until abort signal fires — the channel manager treats promise
309+
// resolution as "provider stopped" and triggers auto-restart.
310+
await new Promise<void>((resolve) => {
311+
if (opts.abortSignal?.aborted) {
312+
resolve();
313+
return;
314+
}
315+
opts.abortSignal?.addEventListener("abort", () => resolve(), { once: true });
316+
});
317+
304318
return { app: expressApp, shutdown };
305319
}

0 commit comments

Comments
 (0)