Darcs checks to see if it can lock WAY to late in the process when pushing.
$ darcs push [path to remote]
[ spend next few minutes choosing patches which I want to push ]
Shall I push this patch? (121/121) [ynW...], or ? for more options: y
Waiting for lock [path to remote]/_darcs/lock
Couldn't get lock [path to remote]/_darcs/lock
darcs: fd:8: hPutBuf: resource vanished (Broken pipe)
Having the user spend time choosing patches carefully one by one and
then instantly giving up as soon as it can't lock at the end of it
(rather than saying "hey, I can't lock, try again?" or something) is
rather poor design.