diff options
Diffstat (limited to 'src/couchdb/couch_os_process.erl')
-rw-r--r-- | src/couchdb/couch_os_process.erl | 16 |
1 files changed, 14 insertions, 2 deletions
diff --git a/src/couchdb/couch_os_process.erl b/src/couchdb/couch_os_process.erl index 578017f8..9a1fcb0c 100644 --- a/src/couchdb/couch_os_process.erl +++ b/src/couchdb/couch_os_process.erl @@ -51,7 +51,13 @@ read(Pid) -> gen_server:call(Pid, read). prompt(Pid, Data) -> - gen_server:call(Pid, {prompt, Data}, infinity). + case gen_server:call(Pid, {prompt, Data}, infinity) of + {ok, Result} -> + Result; + {error, Error} -> + ?LOG_DEBUG("OS Process Error ~p",[Error]), + throw(Error) + end. async(Pid, Data, CallBack) -> gen_server:cast(Pid, {async, Data, CallBack}). @@ -138,7 +144,13 @@ handle_call(read, _From, OsProc) -> handle_call({prompt, Data}, _From, OsProc) -> #os_proc{writer=Writer, reader=Reader} = OsProc, Writer(OsProc, Data), - {reply, Reader(OsProc), OsProc}. + Result = try Reader(OsProc) of + Ok -> {ok, Ok} + catch + throw:OsError -> + {error, OsError} + end, + {reply, Result, OsProc}. handle_cast({async, Data, CallBack}, OsProc) -> #os_proc{writer=Writer, reader=Reader} = OsProc, |