When a downstream build is in progress, Hudson should prevent the upstream builds from occurring until the downstream build is complete.
If component C is building Hudson should block builds on A and B, until C has finished.
It should then rebuild A, B and C before allowing D to proceed.
As the current system stands, if a user presses "build now" on component A when component C is building, A builds immediately. This can be worked around in part by using the locks & latches plugin, but this has the side affect of disabling parallel Matrix builds which massively increases the build time (see
JENKINS-2725). Further, it should NOT be necessary to use ANY plugins to provide this fundamental behaviour.