From 76b573e1bc00f5881641f7049f90166aae7b4755 Mon Sep 17 00:00:00 2001
From: Chouser <chouser@n01se.net>
Date: Tue, 29 Jun 2010 10:02:23 -0400
Subject: [PATCH 1/3] Allows agent error-handler to send successfully. Refs #390

Signed-off-by: Stuart Halloway <stu@thinkrelevance.com>
---
 src/jvm/clojure/lang/Agent.java |    2 +-
 1 files changed, 1 insertions(+), 1 deletions(-)

diff --git a/src/jvm/clojure/lang/Agent.java b/src/jvm/clojure/lang/Agent.java
index 67230bf..a540c93 100644
--- a/src/jvm/clojure/lang/Agent.java
+++ b/src/jvm/clojure/lang/Agent.java
@@ -128,7 +128,7 @@ static class Action implements Runnable{
 				}
 			else
 				{
-				nested.set(PersistentVector.EMPTY);
+				nested.set(null); // allow errorHandler to send
 				if(action.agent.errorHandler != null)
 					{
 					try
-- 
1.7.0.4


From 43c817129e2fd262da740468e6aeada7500ec517 Mon Sep 17 00:00:00 2001
From: Stuart Halloway <stu@thinkrelevance.com>
Date: Thu, 14 Oct 2010 10:05:59 -0400
Subject: [PATCH 2/3] test sending from an error handler #390

---
 test/clojure/test_clojure/agents.clj |    8 ++++++++
 1 files changed, 8 insertions(+), 0 deletions(-)

diff --git a/test/clojure/test_clojure/agents.clj b/test/clojure/test_clojure/agents.clj
index ae0385e..a6f4848 100644
--- a/test/clojure/test_clojure/agents.clj
+++ b/test/clojure/test_clojure/agents.clj
@@ -55,6 +55,14 @@
     (is (true? (instance? ArithmeticException (second @err))))
     (is (thrown? RuntimeException (send agt inc)))))
 
+(deftest can-send-from-error-handler-before-popping-action-that-caused-error
+  (let [handler (fn [agt err]
+                  (send *agent* (constantly :sent-after-error)))
+        failing-agent (agent nil :error-handler handler)]
+    (send failing-agent (fn [_] (throw (RuntimeException.))))
+    (await-for 1000 failing-agent)
+    (is (= :sent-after-error @failing-agent))))
+
 (deftest restart-no-clear
   (let [p (promise)
         agt (agent 1 :error-mode :fail)]
-- 
1.7.0.4


From 8c772722fc58da5dead0b1c5992f9ff772f89eb0 Mon Sep 17 00:00:00 2001
From: Chouser <chouser@n01se.net>
Date: Mon, 8 Nov 2010 01:23:57 -0500
Subject: [PATCH 3/3] extra test for send from agent error

---
 test/clojure/test_clojure/agents.clj |    9 +++++++++
 1 files changed, 9 insertions(+), 0 deletions(-)

diff --git a/test/clojure/test_clojure/agents.clj b/test/clojure/test_clojure/agents.clj
index a6f4848..3161393 100644
--- a/test/clojure/test_clojure/agents.clj
+++ b/test/clojure/test_clojure/agents.clj
@@ -56,6 +56,15 @@
     (is (thrown? RuntimeException (send agt inc)))))
 
 (deftest can-send-from-error-handler-before-popping-action-that-caused-error
+  (let [target-agent (agent :before-error)
+        handler (fn [agt err]
+                  (send target-agent (constantly :sent-after-error)))
+        failing-agent (agent nil :error-handler handler)]
+    (send failing-agent (fn [_] (throw (RuntimeException.))))
+    (await-for 1000 failing-agent)
+    (is (= :sent-after-error @target-agent))))
+
+(deftest can-send-to-self-from-error-handler-before-popping-action-that-caused-error
   (let [handler (fn [agt err]
                   (send *agent* (constantly :sent-after-error)))
         failing-agent (agent nil :error-handler handler)]
-- 
1.7.0.4

