                                       (with-meta #(apply f a)
                                                  {:args a}))))
          ;; force buffer-size futures to start work in the pool
-         (forceahead buffer-size)
+         (forceahead (or buffer-size (impl/get-pool-size pool) 0))
          ;; read the results from the futures
          (map deref)
          (pool-closer shutdown? pool))))

  background."
  [pool buffer-size f & colls]
  (let [[shutdown? pool] (impl/->threadpool pool)
        result-q (LinkedBlockingQueue. (int buffer-size))
        run-one (fn [a]
                  (let [p (promise)]

  Unlike core pmap, it doesn't assume the buffer size is nprocessors + 2;
  instead, it tries to fill the pool."
  [pool f & colls]
  (apply pmap-manual pool nil f colls))

(defn upmap-manual
  "Like pmap-manual, but with results returned in the order they completed.
