diff options
author | Matthew Sackman <matthew@rabbitmq.com> | 2010-08-02 14:51:24 +0100 |
---|---|---|
committer | Matthew Sackman <matthew@rabbitmq.com> | 2010-08-02 14:51:24 +0100 |
commit | 9ac32968f7d815d40374810f3fd96d1bb39c7fa5 (patch) | |
tree | c794c9c061f82b9439528ff76a4b17432297cb0d /src/rabbit_writer.erl | |
parent | 35da42c0701892fd3f19f5c2a33e07d139fb198c (diff) | |
parent | 3cc4df9f81d8ce35ef337ba8f4f8bc0c1fdaefb3 (diff) | |
download | rabbitmq-server-9ac32968f7d815d40374810f3fd96d1bb39c7fa5.tar.gz |
A ginormous amount of debitrotting, rewriting, debugging and refactoring to merge default into bug 15930
Diffstat (limited to 'src/rabbit_writer.erl')
-rw-r--r-- | src/rabbit_writer.erl | 32 |
1 files changed, 18 insertions, 14 deletions
diff --git a/src/rabbit_writer.erl b/src/rabbit_writer.erl index f90ee734..483b46f7 100644 --- a/src/rabbit_writer.erl +++ b/src/rabbit_writer.erl @@ -33,7 +33,7 @@ -include("rabbit.hrl"). -include("rabbit_framing.hrl"). --export([start/4, start_link/4, shutdown/1, mainloop/1]). +-export([start/4, start_link/4, flush/1, mainloop/1]). -export([send_command/2, send_command/3, send_command_and_signal_back/3, send_command_and_signal_back/4, send_command_and_notify/5]). -export([internal_send_command/4, internal_send_command/6]). @@ -79,23 +79,26 @@ rabbit_framing:amqp_method_record(), rabbit_types:content(), non_neg_integer(), rabbit_types:protocol()) -> 'ok'). +-spec(flush/1 :: (pid()) -> 'ok'). -endif. %%---------------------------------------------------------------------------- start(Sock, Channel, FrameMax, Protocol) -> - {ok, spawn(?MODULE, mainloop, [#wstate{sock = Sock, - channel = Channel, - frame_max = FrameMax, - protocol = Protocol}])}. - -start_link(Sock, Channel, FrameMax, Protocol) -> - {ok, spawn_link(?MODULE, mainloop, [#wstate{sock = Sock, + {ok, + proc_lib:spawn(?MODULE, mainloop, [#wstate{sock = Sock, channel = Channel, frame_max = FrameMax, protocol = Protocol}])}. +start_link(Sock, Channel, FrameMax, Protocol) -> + {ok, + proc_lib:spawn_link(?MODULE, mainloop, [#wstate{sock = Sock, + channel = Channel, + frame_max = FrameMax, + protocol = Protocol}])}. + mainloop(State) -> receive Message -> ?MODULE:mainloop(handle_message(Message, State)) @@ -144,8 +147,9 @@ handle_message({inet_reply, _, ok}, State) -> State; handle_message({inet_reply, _, Status}, _State) -> exit({writer, send_failed, Status}); -handle_message(shutdown, _State) -> - exit(normal); +handle_message({flush, Pid, Ref}, State) -> + Pid ! Ref, + State; handle_message(Message, _State) -> exit({writer, message_not_understood, Message}). @@ -171,10 +175,10 @@ send_command_and_notify(W, Q, ChPid, MethodRecord, Content) -> W ! {send_command_and_notify, Q, ChPid, MethodRecord, Content}, ok. -shutdown(W) -> - W ! shutdown, - rabbit_misc:unlink_and_capture_exit(W), - ok. +flush(W) -> + Ref = make_ref(), + W ! {flush, self(), Ref}, + receive Ref -> ok end. %--------------------------------------------------------------------------- |