summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/couchdb/couch_changes.erl2
-rw-r--r--src/couchdb/couch_rep_changes_feed.erl12
2 files changed, 9 insertions, 5 deletions
diff --git a/src/couchdb/couch_changes.erl b/src/couchdb/couch_changes.erl
index 7a9dcd93..35ea147f 100644
--- a/src/couchdb/couch_changes.erl
+++ b/src/couchdb/couch_changes.erl
@@ -117,6 +117,8 @@ get_changes_timeout(Args, Callback) ->
case Timeout of
undefined ->
{DefaultTimeout, fun() -> stop end};
+ infinity ->
+ {infinity, fun() -> stop end};
_ ->
{lists:min([DefaultTimeout, Timeout]), fun() -> stop end}
end;
diff --git a/src/couchdb/couch_rep_changes_feed.erl b/src/couchdb/couch_rep_changes_feed.erl
index 7c308800..343b445c 100644
--- a/src/couchdb/couch_rep_changes_feed.erl
+++ b/src/couchdb/couch_rep_changes_feed.erl
@@ -40,9 +40,7 @@ start_link(Parent, Source, StartSeq, PostProps) ->
gen_server:start_link(?MODULE, [Parent, Source, StartSeq, PostProps], []).
next(Server) ->
- try gen_server:call(Server, next_changes, 31000)
- catch exit:{timeout, _Reason} -> throw(changes_timeout)
- end.
+ gen_server:call(Server, next_changes, infinity).
stop(Server) ->
gen_server:call(Server, stop).
@@ -128,7 +126,8 @@ init([_Parent, Source, Since, PostProps] = InitArgs) ->
"continuous";
false ->
"normal"
- end
+ end,
+ timeout = infinity
},
ChangesPid = spawn_link(fun() ->
ChangesFeedFun = couch_changes:handle_changes(
@@ -369,9 +368,12 @@ decode_row(Row) ->
maybe_stream_next(#state{reqid=nil}) ->
ok;
maybe_stream_next(#state{complete=false, count=N} = S) when N < ?BUFFER_SIZE ->
+ timer:cancel(get(timeout)),
+ {ok, Timeout} = timer:exit_after(31000, changes_timeout),
+ put(timeout, Timeout),
ibrowse:stream_next(S#state.reqid);
maybe_stream_next(_) ->
- ok.
+ timer:cancel(get(timeout)).
start_http_request(RawUrl) ->
Url = ibrowse_lib:parse_url(RawUrl),