anchor.diff:          [{K, ?b2l(iolist_to_binary(V))} || {K, V} <- get_value(qs, Params1, [])]),
       Params = ?replace(Params2, ibrowse_options,
           lists:keysort(1, get_value(ibrowse_options, Params2, []))),
  -    {Worker, Response, IsChanges} = send_ibrowse_req(HttpDb, Params),
  +    {Worker, Response} = send_ibrowse_req(HttpDb, Params),
       Ret = try
           process_response(Response, Worker, HttpDb, Params, Callback)
       catch
           throw:{retry, NewHttpDb0, NewParams0} ->
               {retry, NewHttpDb0, NewParams0}
       after
  -        release_worker(Worker, HttpDb, IsChanges),
  +        ok = couch_replicator_httpc_pool:release_worker(
  +            HttpDb#httpdb.httpc_pool,
  +            Worker
  +        ),
           clean_mailbox(Response)
       end,
       % This is necessary to keep this tail-recursive. Calling
  
positive.code:     Headers2 = oauth_header(HttpDb, Params) ++ Headers1,
      Url = full_url(HttpDb, Params),
      Body = get_value(body, Params, []),
      IsChanges = get_value(path, Params) == "_changes",
      if IsChanges ->
          {ok, Worker} = ibrowse:spawn_link_worker_process(Url),
          Timeout = infinity;
      true ->
          {ok, Worker} = couch_replicator_httpc_pool:get_worker(HttpDb#httpdb.httpc_pool),
          Timeout = case config:get("replicator", "request_timeout", "infinity") of
              "infinity" -> infinity;
              Milliseconds -> list_to_integer(Milliseconds)
          end
      end,
      IbrowseOptions = [
          {response_format, binary}, {inactivity_timeout, HttpDb#httpdb.timeout} |
          lists:ukeymerge(1, get_value(ibrowse_options, Params, []),
  
negative.code:     ok.
  
  
  maybe_retry(Error, Worker, #httpdb{retries = 0} = HttpDb, Params) ->
      report_error(Worker, HttpDb, Params, {error, Error});
  
  