             (>! @matcher {:id id :chs chs :latch latch})
             ;; Waits here until game ends
             (<! latch))
-          (do (>! ch-out {:type "ignored" :msg msg})
-              (recur)))))))
+          (>! ch-out {:type "ignored" :msg msg}))
+        (recur)))))
 
 ;;; Game loop
 (defn game-init [s]

            (when-not @winner
              (recur)))))
      ;; Cleanup
      (doseq [{:keys [latch ch-out]} players]
        (<! (notify ch-out))
        (>! ch-out {:type (if @winner "end" "disconnected")})
        (async/close! latch)))))

  ;; then determines if there has been a winner. If there has been a
  ;; winner, it marks the winner. Flips turn and returns true at this point
  (when-let [i (and
                (<= 0 move (dec ncols))
                (->> (range (* move nrows) (* (inc move) nrows))
                     (filter (fn [i] (= (@state i) 0)))
                     first))]
