X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=lib%2Fjsonrpc.c;h=f648f6b162af5f4aef1361c066786f0c6c5ea292;hb=c6782bb0f7c6cf7b09efe1b94d6bf40f89fe7ed6;hp=f42035e80f5884e7cf25aeca0a730dea391f4c27;hpb=108496163d4d7f77766c2b05c5c20131d6c436a9;p=openvswitch diff --git a/lib/jsonrpc.c b/lib/jsonrpc.c index f42035e8..f648f6b1 100644 --- a/lib/jsonrpc.c +++ b/lib/jsonrpc.c @@ -278,12 +278,14 @@ jsonrpc_send_block(struct jsonrpc *rpc, struct jsonrpc_msg *msg) return error; } - while (!queue_is_empty(&rpc->output) && !rpc->status) { + for (;;) { jsonrpc_run(rpc); + if (queue_is_empty(&rpc->output) || rpc->status) { + return rpc->status; + } jsonrpc_wait(rpc); poll_block(); } - return rpc->status; } int @@ -686,7 +688,6 @@ jsonrpc_session_close(struct jsonrpc_session *s) static void jsonrpc_session_disconnect(struct jsonrpc_session *s) { - reconnect_disconnected(s->reconnect, time_msec(), 0); if (s->rpc) { jsonrpc_error(s->rpc, EOF); jsonrpc_close(s->rpc); @@ -723,6 +724,7 @@ jsonrpc_session_run(struct jsonrpc_session *s) jsonrpc_run(s->rpc); error = jsonrpc_get_status(s->rpc); if (error) { + reconnect_disconnected(s->reconnect, time_msec(), 0); jsonrpc_session_disconnect(s); } } else if (s->stream) { @@ -747,6 +749,7 @@ jsonrpc_session_run(struct jsonrpc_session *s) break; case RECONNECT_DISCONNECT: + reconnect_disconnected(s->reconnect, time_msec(), 0); jsonrpc_session_disconnect(s); break;