Fix prewarm memory leak and race condition #4611
Closed
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
📜 Description
Refactored the
prewarm()method inSentryExecutorServiceto address critical bugs. The method now safely schedules dummy tasks, explicitly cancels them, and clears the queue within a single, atomic operation.💡 Motivation and Context
This change fixes multiple issues in the
prewarm()method:Long.MAX_VALUEfor delay caused an integer overflow, and the scheduled dummy tasks were not properly cleared byexecutorService.getQueue().clear()as they reside in theDelayQueue, leading to a memory leak of these tasks.The fix ensures dummy tasks are scheduled with a safe delay, explicitly cancelled using their
ScheduledFuturereferences, and all operations are combined into a single, atomic task to prevent race conditions and task loss.💚 How did you test it?
SentryExecutorServiceTest.kttest forprewarm().📝 Checklist
sendDefaultPIIis enabled.🔮 Next steps