From 5eb152816d7298853996a8613bbb39f5360f7da0 Mon Sep 17 00:00:00 2001
From: Gary Fredericks <garyf@groupon.com>
Date: Tue, 10 Jul 2012 18:45:26 -0500
Subject: [PATCH] with-redefs saves root binding instead of thread-local

---
 src/clj/clojure/core.clj           |    2 +-
 test/clojure/test_clojure/vars.clj |    9 +++++++++
 2 files changed, 10 insertions(+), 1 deletion(-)

diff --git a/src/clj/clojure/core.clj b/src/clj/clojure/core.clj
index c4710c6..67307a9 100644
--- a/src/clj/clojure/core.clj
+++ b/src/clj/clojure/core.clj
@@ -6609,7 +6609,7 @@
                     (doseq [[a-var a-val] m]
                       (.bindRoot ^clojure.lang.Var a-var a-val)))
         old-vals (zipmap (keys binding-map)
-                         (map deref (keys binding-map)))]
+                         (map #(.getRawRoot %) (keys binding-map)))]
     (try
       (root-bind binding-map)
       (func)
diff --git a/test/clojure/test_clojure/vars.clj b/test/clojure/test_clojure/vars.clj
index 8212657..b1d9e2d 100644
--- a/test/clojure/test_clojure/vars.clj
+++ b/test/clojure/test_clojure/vars.clj
@@ -89,3 +89,12 @@
         (throw (Exception. "simulated failure in with-redefs")))))
     (is (= :temp @p))
     (is (= :original stub-me))))
+
+(def ^:dynamic dynamic-var 1)
+
+(deftest test-with-redefs-inside-binding
+  (binding [dynamic-var 2]
+    (is (= 2 dynamic-var))
+    (with-redefs [dynamic-var 3]
+      (is (= 2 dynamic-var))))
+  (is (= 1 dynamic-var)))
\ No newline at end of file
-- 
1.7.9.5

