@@ -91,13 +91,17 @@ function Base.run(x::JSONRPCEndpoint)
9191 x. status == :idle || error (" Endpoint is not idle." )
9292
9393 x. write_task = @async try
94- for msg in x. out_msg_queue
95- if isopen (x. pipe_out)
96- write_transport_layer (x. pipe_out, msg)
97- else
98- # TODO Reconsider at some point whether this should be treated as an error.
99- break
94+ try
95+ for msg in x. out_msg_queue
96+ if isopen (x. pipe_out)
97+ write_transport_layer (x. pipe_out, msg)
98+ else
99+ # TODO Reconsider at some point whether this should be treated as an error.
100+ break
101+ end
100102 end
103+ finally
104+ close (x. out_msg_queue)
101105 end
102106 catch err
103107 bt = catch_backtrace ()
@@ -106,37 +110,39 @@ function Base.run(x::JSONRPCEndpoint)
106110 else
107111 Base. display_error (stderr , err, bt)
108112 end
109- finally
110- close (x. out_msg_queue)
111113 end
112114
113115 x. read_task = @async try
114- while true
115- message = read_transport_layer (x. pipe_in)
116-
117- if message === nothing || x. status == :closed
118- break
119- end
116+ try
117+ while true
118+ message = read_transport_layer (x. pipe_in)
120119
121- message_dict = JSON. parse (message)
120+ if message === nothing || x. status == :closed
121+ break
122+ end
122123
123- if haskey (message_dict, " method" )
124- try
125- put! (x. in_msg_queue, message_dict)
126- catch err
127- if err isa InvalidStateException
128- break
129- else
130- rethrow (err)
124+ message_dict = JSON. parse (message)
125+
126+ if haskey (message_dict, " method" )
127+ try
128+ put! (x. in_msg_queue, message_dict)
129+ catch err
130+ if err isa InvalidStateException
131+ break
132+ else
133+ rethrow (err)
134+ end
131135 end
132- end
133- else
134- # This must be a response
135- id_of_request = message_dict[" id" ]
136+ else
137+ # This must be a response
138+ id_of_request = message_dict[" id" ]
136139
137- channel_for_response = x. outstanding_requests[id_of_request]
138- put! (channel_for_response, message_dict)
140+ channel_for_response = x. outstanding_requests[id_of_request]
141+ put! (channel_for_response, message_dict)
142+ end
139143 end
144+ finally
145+ close (x. in_msg_queue)
140146 end
141147 catch err
142148 bt = catch_backtrace ()
@@ -145,8 +151,6 @@ function Base.run(x::JSONRPCEndpoint)
145151 else
146152 Base. display_error (stderr , err, bt)
147153 end
148- finally
149- close (x. in_msg_queue)
150154 end
151155
152156 x. status = :running
0 commit comments