diff options
Diffstat (limited to 'src/xml_stream.erl')
-rw-r--r-- | src/xml_stream.erl | 14 |
1 files changed, 12 insertions, 2 deletions
diff --git a/src/xml_stream.erl b/src/xml_stream.erl index 4d7f80d4c..69b6123c0 100644 --- a/src/xml_stream.erl +++ b/src/xml_stream.erl @@ -10,7 +10,7 @@ -author('alexey@sevcom.net'). -vsn('$Revision$ '). --export([start/1, init/1, send_text/2]). +-export([start/1, start/2, init/1, init/2, send_text/2]). -define(XML_START, 0). -define(XML_END, 1). @@ -20,10 +20,18 @@ start(CallbackPid) -> spawn(?MODULE, init, [CallbackPid]). +start(Receiver, CallbackPid) -> + spawn(?MODULE, init, [Receiver, CallbackPid]). + init(CallbackPid) -> Port = open_port({spawn, expat_erl}, [binary]), loop(CallbackPid, Port, []). +init(Receiver, CallbackPid) -> + erlang:monitor(process, Receiver), + Port = open_port({spawn, expat_erl}, [binary]), + loop(CallbackPid, Port, []). + loop(CallbackPid, Port, Stack) -> receive {Port, {data, Bin}} -> @@ -31,7 +39,9 @@ loop(CallbackPid, Port, Stack) -> loop(CallbackPid, Port, process_data(CallbackPid, Stack, Data)); {_From, {send, Str}} -> Port ! {self(), {command, Str}}, - loop(CallbackPid, Port, Stack) + loop(CallbackPid, Port, Stack); + {'DOWN', _Ref, _Type, _Object, _Info} -> + ok end. process_data(CallbackPid, Stack, Data) -> |