Неправильно как-то все это.
Если есть запрос, значит, и соединение. Пока ответ не отдан, веб-сервер должен держать соединение. А если ответ не возвращается, то клиент ждет, пока соединение не отвалится по таймауту. Так что эта техника довольно затратна с точки зрения ресурсов, которые могут быть исчерпаны. Особенно, при наличии достаточно большого количества клиентов.
Ну а так, ошибка 500 может означать и логическую, и ошибку соединения с СУБД, и что какой-то ресурс 3-й стороны недоступен, и многое другое. Так что если логическая, то сервер не "исправится" и, при этом, не выйдет из спячки, если будет ждать ответа 200.
Ну а так, блокировать выполнение можно при помощи каналов (channel). Но практический смысл в этом не вижу.