summaryrefslogtreecommitdiff
path: root/src/rabbit_writer.erl
diff options
context:
space:
mode:
authorMatthew Sackman <matthew@rabbitmq.com>2010-08-02 14:51:24 +0100
committerMatthew Sackman <matthew@rabbitmq.com>2010-08-02 14:51:24 +0100
commit9ac32968f7d815d40374810f3fd96d1bb39c7fa5 (patch)
treec794c9c061f82b9439528ff76a4b17432297cb0d /src/rabbit_writer.erl
parent35da42c0701892fd3f19f5c2a33e07d139fb198c (diff)
parent3cc4df9f81d8ce35ef337ba8f4f8bc0c1fdaefb3 (diff)
downloadrabbitmq-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.erl32
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.
%---------------------------------------------------------------------------