{"push_id":696447769,"size":6,"distinct_size":6,"ref":"refs/heads/master","head":"c3ac7ed61e92aa3b34abe7faedbef195a521750e","before":"1fed2a23ec104ba7960e489020ddc70692da7bfa","commits":[{"sha":"6f343dc7c2f0c32e9eb1a0b5d588a2e7ad6f62ba","author":{"email":"c99fba22388097024827a9c0aa0ce013f67fea9e@gmail.com","name":"Stephen Connolly"},"message":"[FIXED JENKINS-28840] Deadlock between Queue.maintain and Executor.interrupt\n\nMore fun here:\n\n- All this originates from Executor extending Thread.\n- There is funky logic in the lock handling code of the JVM that makes assumptions\n  about how it might proceed with the lock when the thread holding the lock has its\n  interrupt flag set.\n- Really it would be better if Executor did not extend Thread as that way we wouldn't\n  have to deal with some of that complexity. But OTOH we are where we are and backwards\n  compatibility may make such a change not possible without a lot of breakage.\n- Fixing the issue at hand, firstly requires that interrupting a Computer happens with the\n  Queue lock held (to speed up tests we have Jenkins.cleanup get the lock for all Computers)\n  That prevents the Queue maintain thread from getting caught\n- Secondly, when removing an executor from a computer we process the removal while\n  holding the Queue lock, but we move the removal itself to a separate thread if we cannot\n  get the Queue lock in order to avoid deadlock.\n- Also add helper methods to wrap tasks to be performed while holding the lock\n  and a helper method for Runnables that exposes the tryLock functionality","distinct":true,"url":"https://api.github.com/repos/Sounie/jenkins/commits/6f343dc7c2f0c32e9eb1a0b5d588a2e7ad6f62ba"},{"sha":"10a88756420eaab97bac175dac7654e0a5f4433c","author":{"email":"c99fba22388097024827a9c0aa0ce013f67fea9e@gmail.com","name":"Stephen Connolly"},"message":"Test case was subject to timing bugs\n\n- I suspect the synchronization on Jenkins is a bug also... but not causing the test failure, so will ignore for now","distinct":true,"url":"https://api.github.com/repos/Sounie/jenkins/commits/10a88756420eaab97bac175dac7654e0a5f4433c"},{"sha":"c02e02df420ea1e44d8ef1a3052f37c21307c3a8","author":{"email":"c99fba22388097024827a9c0aa0ce013f67fea9e@gmail.com","name":"Stephen Connolly"},"message":"prepare for merge","distinct":true,"url":"https://api.github.com/repos/Sounie/jenkins/commits/c02e02df420ea1e44d8ef1a3052f37c21307c3a8"},{"sha":"e385231b408db56d2c051822be24556588be9733","author":{"email":"c99fba22388097024827a9c0aa0ce013f67fea9e@gmail.com","name":"Stephen Connolly"},"message":"Merge remote-tracking branch 'jenkins/master' into jenkins-28840","distinct":true,"url":"https://api.github.com/repos/Sounie/jenkins/commits/e385231b408db56d2c051822be24556588be9733"},{"sha":"71e684ad900363c48d845f73c1993f90de4417ad","author":{"email":"c99fba22388097024827a9c0aa0ce013f67fea9e@gmail.com","name":"Stephen Connolly"},"message":"Merge pull request #1738 from stephenc/jenkins-28840\n\n[FIXED JENKINS-28840] Deadlock between Queue.maintain and Executor.interrupt","distinct":true,"url":"https://api.github.com/repos/Sounie/jenkins/commits/71e684ad900363c48d845f73c1993f90de4417ad"},{"sha":"c3ac7ed61e92aa3b34abe7faedbef195a521750e","author":{"email":"f2e0c4d94568f191d1a31199ea2c9fbd13a50fee@hotmail.com","name":"Stephen Souness"},"message":"Merge origin/master","distinct":true,"url":"https://api.github.com/repos/Sounie/jenkins/commits/c3ac7ed61e92aa3b34abe7faedbef195a521750e"}]}