X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=lib%2Fvconn.c;h=cbe3c77131d63f2d32a9a4a420bbf1982d74d0a4;hb=6d1fb217a904374316abdc9050db795129f72a13;hp=caa1bccfcae38c9b5d1d2372b36aafadefa4a76c;hpb=46a8005051283ca176c51da453dbc918817bac07;p=sliver-openvswitch.git diff --git a/lib/vconn.c b/lib/vconn.c index caa1bccfc..cbe3c7713 100644 --- a/lib/vconn.c +++ b/lib/vconn.c @@ -288,13 +288,7 @@ vconn_open_block(const char *name, enum ofp_version min_version, error = vconn_open(name, min_version, &vconn, DSCP_DEFAULT); if (!error) { - while ((error = vconn_connect(vconn)) == EAGAIN) { - vconn_run(vconn); - vconn_run_wait(vconn); - vconn_connect_wait(vconn); - poll_block(); - } - assert(error != EINPROGRESS); + error = vconn_connect_block(vconn); } if (error) { @@ -622,6 +616,24 @@ do_send(struct vconn *vconn, struct ofpbuf *msg) return retval; } +/* Same as vconn_connect(), except that it waits until the connection on + * 'vconn' completes or fails. Thus, it will never return EAGAIN. */ +int +vconn_connect_block(struct vconn *vconn) +{ + int error; + + while ((error = vconn_connect(vconn)) == EAGAIN) { + vconn_run(vconn); + vconn_run_wait(vconn); + vconn_connect_wait(vconn); + poll_block(); + } + assert(error != EINPROGRESS); + + return error; +} + /* Same as vconn_send, except that it waits until 'msg' can be transmitted. */ int vconn_send_block(struct vconn *vconn, struct ofpbuf *msg)