История изменений
Исправление unlog1c, (текущая версия) :
На самом деле попытка вызвать рестарт из эррор-хендлера падает с исключением, но ты этого не видишь так как ошибки в эррор-хендлере втихую ловятся и забываются. Смотри:
user=> (def q (agent ""))
#'user/q
user=> (set-error-handler! q (fn [ag _]
(try
(restart-agent ag "")
(catch Exception ex (println ex)))))
nil
user=> (send q inc)
#<Agent@47c5e6ed: ""
#<RuntimeException java.lang.RuntimeException: Agent does not need a restart>
Иными словами, в момент когда вызывается эррор-хендлер, агент еще не зафейленный чтобы его рестартить.
Исходная версия unlog1c, :
На самом деле попытка вызвать рестарт из эррор-хендлера падает с исключением, но ты этого не видишь так как ошибки в эррор-хендлере втихую ловятся и забываются. Смотри:
user=> (def q (agent ""))
#'user/q
user=> (set-error-handler! q (fn [ag _]
(try
(restart-agent ag "")
(catch Exception ex (println ex)))))
nil
user=> (send q inc)
#<Agent@47c5e6ed: ""
#<RuntimeException java.lang.RuntimeException: Agent does not need a restart>
Иными словами, в момент когда вызывается эррор-хендлер, агент еще не зафейленный чтобы его рестартить.