The problem is that the POST locks transientActions first and then locks the project itself.. the GET locks the project first, then transientActions. If GET and POST occur at the same time, they might each lock the first one, then deadlock trying to get the other.
Adding synchronized on Project.updateTransientActions so the POST locks in the same order as GET. Hopefully this avoids deadlock, as only one will get that lock first and transientActions should then be available, so one request can complete and release both.
(reopen issue you still see a problem in 1.356 or later, thx)
The problem is that the POST locks transientActions first and then locks the project itself.. the GET locks the project first, then transientActions. If GET and POST occur at the same time, they might each lock the first one, then deadlock trying to get the other.
Adding synchronized on Project.updateTransientActions so the POST locks in the same order as GET. Hopefully this avoids deadlock, as only one will get that lock first and transientActions should then be available, so one request can complete and release both.
(reopen issue you still see a problem in 1.356 or later, thx)