From cd13e4cbc5f056a83e1e1542e0b34c0eb0ec08d1 Mon Sep 17 00:00:00 2001 From: Ben Pfaff Date: Wed, 8 Oct 2008 14:24:18 -0700 Subject: [PATCH] Make rconn_disconnect() a no-op if already disconnected. --- lib/rconn.c | 22 ++++++++++++---------- 1 file changed, 12 insertions(+), 10 deletions(-) diff --git a/lib/rconn.c b/lib/rconn.c index 81954955e..e5f377b96 100644 --- a/lib/rconn.c +++ b/lib/rconn.c @@ -227,18 +227,20 @@ rconn_connect_unreliably(struct rconn *rc, void rconn_disconnect(struct rconn *rc) { - if (rc->vconn) { - vconn_close(rc->vconn); - rc->vconn = NULL; - } - free(rc->name); - rc->name = xstrdup("void"); - rc->reliable = false; + if (rc->state != S_VOID) { + if (rc->vconn) { + vconn_close(rc->vconn); + rc->vconn = NULL; + } + free(rc->name); + rc->name = xstrdup("void"); + rc->reliable = false; - rc->backoff = 0; - rc->backoff_deadline = TIME_MIN; + rc->backoff = 0; + rc->backoff_deadline = TIME_MIN; - state_transition(rc, S_VOID); + state_transition(rc, S_VOID); + } } /* Disconnects 'rc' and frees the underlying storage. */ -- 2.43.0