vconn: Fix vconn_get_status() return value when connection in progress.
authorBen Pfaff <blp@nicira.com>
Sat, 1 Mar 2014 00:20:17 +0000 (16:20 -0800)
committerBen Pfaff <blp@nicira.com>
Sat, 1 Mar 2014 02:15:02 +0000 (18:15 -0800)
commit77587e0fef5818b5a873932c573781a14eb9edfb
tree8dadb53480ecc5022b0696ec55f3f7887634f0af
parent9159b85862a86fab20e308601602a5b2ab08c933
vconn: Fix vconn_get_status() return value when connection in progress.

When a connection takes a few rounds of the state machine to complete,
'error' gets filled with EAGAIN until that completes.  This didn't match
the vconn_get_status() documentation, which says that it only returns a
positive errno value if there was an error.  One could fix the problem
by updating the documentation (and the callers) or by updating the
implementation.  I decided that the latter was the way to go because
the distinction between the TCP connection being in progress or complete
isn't visible to the client; what is visible to the client is the OpenFlow
negotiation being complete.

This problem is difficult to find in the unit tests because TCP connections
to localhost complete immediately.

Bug introduced by commit accaecc419cc57d (rconn: Discover errors in
rconn_run() even if rconn_recv() is never called.)

Reported-by: Anuprem Chalvadi <achalvadi@vmware.com>
Signed-off-by: Ben Pfaff <blp@nicira.com>
AUTHORS
lib/vconn.c