                                                      (h-shift ts)  ; shift to half-open and return true
                                                      false))))
                                              (finally
-                                               (.release bi-sema)))
+                                               (.release retry-lock)))
                                            ;; could not obtain soft-lock, another thread may be working, so disengage
                                            false))))))
 

                    true)]
      (reify
        clojure.lang.IDeref (deref   [_] @v-state)
        t/IReinitializable  (reinit! [_] (locking v-state
                                           (vreset! v-state (init-fn))))
        t/IRetryResolver    (retry?  [_] (if (.tryAcquire bi-sema)
                                           (try
                                             (locking v-state
                                               (let [^RetryState state @v-state
                                                     ts (now-finder)]
                                                 (if (:open-elapsed? state)

                                            ))
          v-state (volatile! (init-fn))
          ^Semaphore
          reinit-lock (Semaphore. 1 false)  ; binary semaphore
          ^Semaphore
          retry-lock  (Semaphore. 1 false)  ; binary semaphore
          h-shift (fn [^long ts]
                    (vswap! v-state assoc
                      :open-elapsed? true
