fix(rpc): fix race condition

This commit is contained in:
Sergey Slipchenko 2023-09-09 14:47:05 +04:00
parent 420b94eeec
commit d42343146a
No known key found for this signature in database
GPG Key ID: 375ECA0AF0329782

View File

@ -207,9 +207,15 @@ Object rpc_send_call(uint64_t id, const char *method_name, Array args, ArenaMem
// Push the frame // Push the frame
ChannelCallFrame frame = { request_id, false, false, NIL, NULL }; ChannelCallFrame frame = { request_id, false, false, NIL, NULL };
kv_push(rpc->call_stack, &frame); kv_push(rpc->call_stack, &frame);
LOOP_PROCESS_EVENTS_UNTIL(&main_loop, channel->events, -1, frame.returned); LOOP_PROCESS_EVENTS_UNTIL(&main_loop, channel->events, -1, frame.returned || rpc->closed);
(void)kv_pop(rpc->call_stack); (void)kv_pop(rpc->call_stack);
if (rpc->closed) {
api_set_error(err, kErrorTypeException, "Invalid channel: %" PRIu64, id);
channel_decref(channel);
return NIL;
}
if (frame.errored) { if (frame.errored) {
if (frame.result.type == kObjectTypeString) { if (frame.result.type == kObjectTypeString) {
api_set_error(err, kErrorTypeException, "%s", api_set_error(err, kErrorTypeException, "%s",