reconnect: Fix repeated RECONNECT_CONNECT that was confusing JSON-RPC.
authorBen Pfaff <blp@nicira.com>
Tue, 12 Jan 2010 01:00:25 +0000 (17:00 -0800)
committerBen Pfaff <blp@nicira.com>
Tue, 12 Jan 2010 01:02:43 +0000 (17:02 -0800)
commit3603f8da20f495611b077e3056db75d0cf8574fb
treecf85502b9b3c7657a54429220225e7195f2262d0
parentf20bbd7ad2e76d8f07b8693ded1f09f6c5aacfd2
reconnect: Fix repeated RECONNECT_CONNECT that was confusing JSON-RPC.

reconnect_run() returns RECONNECT_CONNECT to tell the client that it should
start a new connection.  The client is then supposed to call
reconnect_connecting() to tell the FSM that it has begun a connection
attempt.  However, even after reconnect_connecting() was called,
reconnect_run() continued to return RECONNECT_CONNECT on each call until
the connection succeeded or failed.  This confused the jsonrpc_session
client, which expected that it would get a 0 return value from
reconnect_run() while the connection attempt was in progress.  Connections
that required multiple trips through the main poll loop, e.g. for SSL
negotiation, would often get cut off to start a second connection attempt.

This commit change reconnect_run() to return RECONNECT_CONNECT only until
the client tells it that a connection is in progress, which fixes the
problem.  This change entails a change to the internal details of the
reconnect FSM, so this commit also updates the reconnect tests to match.

Reported by Jeremy Stribling.
lib/reconnect.c
tests/reconnect.at