[FIXED JENKINS-28690] Deadlock in hudson.model.Executor
- Rather fun one here. The Lock code relies on assuming that Thread.interrupted() is clear on entry - If it then sees Thread.interrupted() set, it will interrupt the current thread in order to set the flag again. - Executor is a thread that does funky things with an overridden interrupt method - Executor.abortResult() is used to track a build be interrupted or aborted in some other way - As a result the abortResult can cause a deadlockif there is a genuine interruption - This fix clears the interrupt flag in abortResult() and uses the write lock in order to ensure: - The same lock as used in interrupt() is helf - The interrupt flag is clear - Clearing the interrupt flag should be safe as the only time it is called is immediately after an interruption and the resulting exception is caught and rethrown/logged anyway
Loading
Please register or sign in to comment