diff --git a/erlang/apps/as/src/scan_state.erl b/erlang/apps/as/src/scan_state.erl index 64e77a6..4814984 100644 --- a/erlang/apps/as/src/scan_state.erl +++ b/erlang/apps/as/src/scan_state.erl @@ -76,7 +76,10 @@ stdin() -> do_fopen(stdin). do_fopen(File) -> - gen_server:start(?MODULE, File, []). + case gen_server:start(?MODULE, File, []) of + {error, {shutdown, Reason}} -> {error, Reason}; + Result -> Result + end. -spec ungetc(byte(), scan_state()) -> ok | {error, {module(), term()}}. ungetc(Ch, Pid) -> @@ -108,7 +111,9 @@ init(stdin) -> init(File) -> case file:open(File, [raw, read, read_ahead]) of {ok, IoDev} -> do_init(File, IoDev); - {error, Reason} -> {stop, {file, Reason}} + {error, Reason} -> + %% The {shutdown, ...} wrapper prevents an unwanted crash report. + {stop, {shutdown, {file, Reason}}} end. do_init(FileName, IoDev) -> diff --git a/erlang/apps/lib/src/pdp10_stdio.erl b/erlang/apps/lib/src/pdp10_stdio.erl index 99619ee..01798be 100644 --- a/erlang/apps/lib/src/pdp10_stdio.erl +++ b/erlang/apps/lib/src/pdp10_stdio.erl @@ -110,6 +110,7 @@ fopen(Path, Modes) -> do_open(What) -> case gen_server:start(?MODULE, What, []) of {ok, Pid} -> {ok, #file{pid = Pid}}; + {error, {shutdown, Reason}} -> {error, Reason}; {error, _Reason} = Error -> Error end. @@ -190,8 +191,8 @@ do_init({ok, {IoDev, Read, Write}}) -> , iodir = seek }}; do_init({error, Reason}) -> - %% FIXME: this still seems to generate crash reports - {stop, Reason}. + %% The {shutdown, ...} wrapper prevents an unwanted crash report. + {stop, {shutdown, Reason}}. handle_call(Req, _From, State) -> case Req of