diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/rabbit_disk_queue.erl | 27 |
1 files changed, 16 insertions, 11 deletions
diff --git a/src/rabbit_disk_queue.erl b/src/rabbit_disk_queue.erl index de31b2388c..26d0c8dcce 100644 --- a/src/rabbit_disk_queue.erl +++ b/src/rabbit_disk_queue.erl @@ -514,10 +514,11 @@ handle_cast({change_memory_footprint, Conserve}, State) -> handle_info({'EXIT', _Pid, Reason}, State) -> {stop, Reason, State}; -handle_info(timeout, State = #dqstate { current_dirty = true }) -> +handle_info(timeout, State = #dqstate { timer_ref = TRef }) + when TRef /= undefined -> noreply(sync_current_file_handle(State)); handle_info(_Info, State) -> - {noreply, State}. + noreply(State). terminate(_Reason, State) -> shutdown(State). @@ -575,15 +576,23 @@ to_ram_disk_mode(State = #dqstate { operation_mode = disk_only, ok = dets:delete_all_objects(MsgLocationDets), State #dqstate { operation_mode = ram_disk }. -noreply(NewState = #dqstate { current_dirty = true }) -> +noreply(NewState = #dqstate { on_sync_froms = [], timer_ref = undefined }) -> + {noreply, NewState, infinity}; +noreply(NewState = #dqstate { timer_ref = undefined }) -> {noreply, start_commit_timer(NewState), 0}; +noreply(NewState = #dqstate { on_sync_froms = [] }) -> + {noreply, stop_commit_timer(NewState), infinity}; noreply(NewState) -> - {noreply, stop_commit_timer(NewState), infinity}. + {noreply, NewState, 0}. -reply(Reply, NewState = #dqstate { current_dirty = true }) -> +reply(Reply, NewState = #dqstate { on_sync_froms = [], timer_ref = undefined }) -> + {reply, Reply, NewState, infinity}; +reply(Reply, NewState = #dqstate { timer_ref = undefined }) -> {reply, Reply, start_commit_timer(NewState), 0}; +reply(Reply, NewState = #dqstate { on_sync_froms = [] }) -> + {reply, Reply, stop_commit_timer(NewState), infinity}; reply(Reply, NewState) -> - {reply, Reply, stop_commit_timer(NewState), infinity}. + {reply, Reply, NewState, 0}. form_filename(Name) -> filename:join(base_directory(), Name). @@ -728,12 +737,8 @@ sequence_lookup(Sequences, Q) -> start_commit_timer(State = #dqstate { timer_ref = undefined }) -> {ok, TRef} = timer:apply_after(?SYNC_INTERVAL, ?MODULE, filesync, []), - State #dqstate { timer_ref = TRef }; -start_commit_timer(State) -> - State. + State #dqstate { timer_ref = TRef }. -stop_commit_timer(State = #dqstate { timer_ref = undefined }) -> - State; stop_commit_timer(State = #dqstate { timer_ref = TRef }) -> {ok, cancel} = timer:cancel(TRef), State #dqstate { timer_ref = undefined }. |
