X-Git-Url: http://git.cascardo.eti.br/?a=blobdiff_plain;f=lib%2Frconn.c;h=ea45134fea3bcaf02ec4a34a12abe104a530b9af;hb=02dd3123a0e312f1d33403e744af52dd6096f12d;hp=49fe767af0f9fd067bdfb53a67ac590d36c553ef;hpb=efa6c663df0bcad748e3a89d7b3f4dec187f6f53;p=cascardo%2Fovs.git diff --git a/lib/rconn.c b/lib/rconn.c index 49fe767af..ea45134fe 100644 --- a/lib/rconn.c +++ b/lib/rconn.c @@ -178,7 +178,7 @@ rconn_new_from_vconn(const char *name, struct vconn *vconn) struct rconn * rconn_create(int probe_interval, int max_backoff) { - struct rconn *rc = xcalloc(1, sizeof *rc); + struct rconn *rc = xzalloc(sizeof *rc); rc->state = S_VOID; rc->state_entered = time_now(); @@ -462,6 +462,15 @@ void rconn_run(struct rconn *rc) { int old_state; + size_t i; + + if (rc->vconn) { + vconn_run(rc->vconn); + } + for (i = 0; i < rc->n_monitors; i++) { + vconn_run(rc->monitors[i]); + } + do { old_state = rc->state; switch (rc->state) { @@ -479,7 +488,17 @@ rconn_run(struct rconn *rc) void rconn_run_wait(struct rconn *rc) { - unsigned int timeo = timeout(rc); + unsigned int timeo; + size_t i; + + if (rc->vconn) { + vconn_run_wait(rc->vconn); + } + for (i = 0; i < rc->n_monitors; i++) { + vconn_run_wait(rc->monitors[i]); + } + + timeo = timeout(rc); if (timeo != UINT_MAX) { unsigned int expires = sat_add(rc->state_entered, timeo); unsigned int remaining = sat_sub(expires, time_now());