tangled
alpha
login
or
join now
hauleth.dev
/
e9p
9
fork
atom
Pure Erlang implementation of 9p2000 protocol
filesystem
fs
9p2000
erlang
9p
9
fork
atom
overview
issues
4
pulls
pipelines
Add error handling for Erlang errors
hauleth.dev
1 month ago
14736ded
c7f912d2
verified
This commit was signed with the committer's
known signature
.
hauleth.dev
SSH Key Fingerprint:
SHA256:1hEP8QO8nM2KQfQ8jK4Q19y/CmqVZQI/cNSht3c1QlI=
+7
-4
1 changed file
expand all
collapse all
unified
split
src
e9p_server.erl
+7
-4
src/e9p_server.erl
···
40
40
loop(Sock, FIDs, Handler) ->
41
41
case e9p_transport:read(Sock) of
42
42
{ok, Tag, Data} ->
43
43
-
?LOG_WARNING(#{msg => Data}),
44
44
-
case handle_message(Data, FIDs, Handler) of
43
43
+
?LOG_DEBUG(#{msg => Data}),
44
44
+
try handle_message(Data, FIDs, Handler) of
45
45
{ok, Reply, RFIDs, RHandler} ->
46
46
e9p_transport:send(Sock, Tag, Reply),
47
47
?MODULE:loop(Sock, RFIDs, RHandler);
48
48
{error, Err, RHandler} ->
49
49
e9p_transport:send(Sock, Tag, error_msg(Err)),
50
50
?MODULE:loop(Sock, FIDs, RHandler)
51
51
+
catch
52
52
+
C:E:S ->
53
53
+
e9p_transport:send(Sock, Tag, #rerror{msg = io_lib:format("Caught ~p: ~p", [C, E])}),
54
54
+
erlang:raise(C, E, S)
51
55
end;
52
56
{error, closed} ->
53
53
-
?LOG_WARNING("Connection closed"),
57
57
+
?LOG_INFO("Connection closed"),
54
58
ok
55
59
end.
56
60
···
80
84
81
85
handle_message(#topen{fid = FID, mode = Mode}, FIDs, Handler0) ->
82
86
maybe
83
83
-
?LOG_WARNING(#{fids => FIDs}),
84
87
{ok, QID} ?= get_qid(FIDs, FID),
85
88
{ok, {NewQID, IOUnit}, Handler} ?= e9p_fs:open(Handler0, QID, Mode),
86
89
{ok, #ropen{qid = QID, io_unit = IOUnit}, FIDs#{FID => NewQID}, Handler}