adobe / aepsdk-core-ios

Adobe Experience Platform Mobile Core SDK in Swift
Apache License 2.0
24 stars 40 forks source link

Fix race condition in registerEventListener #1050

Closed praveek closed 3 months ago

praveek commented 3 months ago

Currently, the EventHubPlaceHolder extension is automatically registered in the init method of EventHub. The EventHub.registerEventListener() method uses this placeholder instance to store all listeners. We are presently fetching the extensionContainer for the EventHub extension using the shared state name, which becomes available only after the extension is initialized asynchronously. This leads to a lot of flaky test failures. In real-world scenarios, the impact is minimal but could occur if the app attempts to register an event listener early in the app lifecycle.

To resolve this, we will pull the EventHub extension container using its type instead of the shared state name to ensure listeners are not missed during registration. Additionally, helper methods have been added to avoid duplicate logic inside EventHub.