From 6676a982ff18d6a6b346f608e7ce313cfccc873e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lo=C3=AFc=20Hoguin?= Date: Fri, 10 Apr 2015 12:42:39 +0300 Subject: Add functions await_up/{1,2,3} for sync open --- src/gun.erl | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) (limited to 'src/gun.erl') diff --git a/src/gun.erl b/src/gun.erl index b3623eb..074b121 100644 --- a/src/gun.erl +++ b/src/gun.erl @@ -48,6 +48,9 @@ -export([await_body/2]). -export([await_body/3]). -export([await_body/4]). +-export([await_up/1]). +-export([await_up/2]). +-export([await_up/3]). %% Flushing gun messages. -export([flush/1]). @@ -333,6 +336,33 @@ await_body(ServerPid, StreamRef, Timeout, MRef, Acc) -> {error, timeout} end. +-spec await_up(pid()) -> {ok, http | spdy} | {error, atom()}. +await_up(ServerPid) -> + MRef = monitor(process, ServerPid), + Res = await_up(ServerPid, 5000, MRef), + demonitor(MRef, [flush]), + Res. + +-spec await_up(pid(), reference() | timeout()) -> {ok, http | spdy} | {error, atom()}. +await_up(ServerPid, MRef) when is_reference(MRef) -> + await_up(ServerPid, 5000, MRef); +await_up(ServerPid, Timeout) -> + MRef = monitor(process, ServerPid), + Res = await_up(ServerPid, Timeout, MRef), + demonitor(MRef, [flush]), + Res. + +-spec await_up(pid(), timeout(), reference()) -> {ok, http | spdy} | {error, atom()}. +await_up(ServerPid, Timeout, MRef) -> + receive + {gun_up, ServerPid, Protocol} -> + {ok, Protocol}; + {'DOWN', MRef, process, ServerPid, Reason} -> + {error, Reason} + after Timeout -> + {error, timeout} + end. + -spec flush(pid() | reference()) -> ok. flush(ServerPid) when is_pid(ServerPid) -> flush_pid(ServerPid); -- cgit v1.2.3