LINUX.ORG.RU

История изменений

Исправление 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>

Иными словами, в момент когда вызывается эррор-хендлер, агент еще не зафейленный чтобы его рестартить.