title: go block hangs indefinitely with core.sync
body: <p>Here is the code: </p>
  
  <pre><code>(ns typed-clj-test.async
    (:require [clojure.core.async
               :as a
               :refer [&gt;! &lt;! &gt;!! &lt;!!
                       go chan buffer
                       close! thread
                       alts! alts!! timeout]]))
  
  (def echo-buffer (chan 2))
  (go (do (&lt;! (timeout 5000))
          (println (&lt;! echo-buffer))))
  (&gt;!! echo-buffer "msg1")
  (&gt;!! echo-buffer "msg2")
  (&gt;!! echo-buffer "msg3")
  (&gt;!! echo-buffer "msg4")
  </code></pre>
  
  <p>This hangs forever after printing msg1 in nrepl: </p>
  
  <pre><code>typed-clj-test.async=&gt; (def echo-buffer (chan 2))
  #'typed-clj-test.async/echo-buffer
  typed-clj-test.async=&gt; (go (do (&lt;! (timeout 5000))
                    #_=&gt;         (println (&lt;! echo-buffer))))
  #&lt;ManyToManyChannel clojure.core.async.impl.channels.ManyToManyChannel@6cc648a&gt;
  typed-clj-test.async=&gt; (&gt;!! echo-buffer "msg1")
  true
  typed-clj-test.async=&gt; (&gt;!! echo-buffer "msg2")
  true
  typed-clj-test.async=&gt; (&gt;!! echo-buffer "msg3")
  msg1
  true
  typed-clj-test.async=&gt; (&gt;!! echo-buffer "msg4")
  </code></pre>