1
0
mirror of https://github.com/Unleash/unleash.git synced 2025-07-26 13:48:33 +02:00

fix: tear down also event handlers in addon service (#10295)

This commit is contained in:
Jaanus Sellin 2025-07-03 12:09:35 +03:00 committed by GitHub
parent 082a6fdb16
commit 89cff9d533
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 27 additions and 3 deletions

View File

@ -110,6 +110,13 @@ export default class EventService {
return this.eventStore.on(eventName, listener);
}
off(
eventName: string | symbol,
listener: (...args: any[]) => void,
): EventEmitter {
return this.eventStore.off(eventName, listener);
}
private async enhanceEventsWithTags(
events: IBaseEvent[],
): Promise<IBaseEvent[]> {

View File

@ -59,6 +59,8 @@ export default class AddonService {
fetchAddonConfigs: (() => Promise<IAddon[]>) &
memoizee.Memoized<() => Promise<IAddon[]>>;
private eventHandlers: Map<string, (event: IEvent) => void>;
constructor(
{
addonStore,
@ -83,6 +85,7 @@ export default class AddonService {
this.logger = getLogger('services/addon-service.js');
this.tagTypeService = tagTypeService;
this.eventService = eventService;
this.eventHandlers = new Map();
this.addonProviders =
addons ||
@ -124,9 +127,11 @@ export default class AddonService {
}
registerEventHandler(): void {
SUPPORTED_EVENTS.forEach((eventName) =>
this.eventService.onEvent(eventName, this.handleEvent(eventName)),
);
SUPPORTED_EVENTS.forEach((eventName) => {
const handler = this.handleEvent(eventName);
this.eventHandlers.set(eventName, handler);
this.eventService.onEvent(eventName, handler);
});
}
handleEvent(eventName: string): (event: IEvent) => void {
@ -349,6 +354,18 @@ export default class AddonService {
}
destroy(): void {
this.eventHandlers.forEach((handler, eventName) => {
try {
this.eventService.off(eventName, handler);
} catch (error) {
this.logger.debug(
`Failed to remove event handler for ${eventName}:`,
error,
);
}
});
this.eventHandlers.clear();
Object.values(this.addonProviders).forEach((addon) =>
addon.destroy?.(),
);