From 4c4f904ee1a7fe2b61137532de3668ba5ad3a6d8 Mon Sep 17 00:00:00 2001 From: Magnus Ahltorp Date: Tue, 18 Nov 2014 00:17:28 +0100 Subject: Move plop:add out of gen_server --- src/util.erl | 21 ++++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) (limited to 'src/util.erl') diff --git a/src/util.erl b/src/util.erl index 435dbc8..2125d5e 100644 --- a/src/util.erl +++ b/src/util.erl @@ -3,7 +3,8 @@ -module(util). -export([tempfilename/1, fsync/1, exit_with_error/3, - check_error/3, write_tempfile_and_rename/3]). + check_error/3, write_tempfile_and_rename/3, + spawn_and_wait/1]). -spec tempfilename(string()) -> string(). tempfilename(Base) -> @@ -51,3 +52,21 @@ write_tempfile_and_rename(Name, NurseryName, Content) -> exit_with_error(writefile, Error, "Error when creating tempfile") end. + +spawn_and_wait(Fun) -> + ParentPid = self(), + ChildPid = spawn_link(fun () -> + try + Result = Fun(), + ParentPid ! {result, self(), Result} + catch + Type:What -> + [CrashFunction | Stack] = erlang:get_stacktrace(), + lager:error("Crashed process: ~p ~p~n ~p~n ~p~n", [Type, What, CrashFunction, Stack]), + ParentPid ! {result, self(), crash} + end + end), + receive + {result, ChildPid, Result} -> + Result + end. -- cgit v1.1