s->op_st_chg.duration = check->duration;
}
+ /* propagate changes */
+ thread_isolate();
+ srv_update_status(s);
+ thread_release();
+
for (srv = s->trackers; srv; srv = srv->tracknext) {
HA_SPIN_LOCK(SERVER_LOCK, &srv->lock);
srv_set_stopped(srv, NULL, NULL);
HA_SPIN_UNLOCK(SERVER_LOCK, &srv->lock);
}
-
- /* propagate changes */
- thread_isolate();
- srv_update_status(s);
- thread_release();
}
/* Marks server <s> up regardless of its checks' statuses and provided it isn't
if (s->slowstart <= 0)
s->next_state = SRV_ST_RUNNING;
+ /* propagate changes */
+ thread_isolate();
+ srv_update_status(s);
+ thread_release();
+
for (srv = s->trackers; srv; srv = srv->tracknext) {
HA_SPIN_LOCK(SERVER_LOCK, &srv->lock);
srv_set_running(srv, NULL, NULL);
HA_SPIN_UNLOCK(SERVER_LOCK, &srv->lock);
}
-
- /* propagate changes */
- thread_isolate();
- srv_update_status(s);
- thread_release();
}
/* Marks server <s> stopping regardless of its checks' statuses and provided it
s->op_st_chg.duration = check->duration;
}
+ /* propagate changes */
+ thread_isolate();
+ srv_update_status(s);
+ thread_release();
+
for (srv = s->trackers; srv; srv = srv->tracknext) {
HA_SPIN_LOCK(SERVER_LOCK, &srv->lock);
srv_set_stopping(srv, NULL, NULL);
HA_SPIN_UNLOCK(SERVER_LOCK, &srv->lock);
}
-
- /* propagate changes */
- thread_isolate();
- srv_update_status(s);
- thread_release();
}
/* Enables admin flag <mode> (among SRV_ADMF_*) on server <s>. This is used to
if (cause)
strlcpy2(s->adm_st_chg_cause, cause, sizeof(s->adm_st_chg_cause));
+ /* propagate changes */
+ thread_isolate();
+ srv_update_status(s);
+ thread_release();
+
/* stop going down if the equivalent flag was already present (forced or inherited) */
if (((mode & SRV_ADMF_MAINT) && (s->next_admin & ~mode & SRV_ADMF_MAINT)) ||
((mode & SRV_ADMF_DRAIN) && (s->next_admin & ~mode & SRV_ADMF_DRAIN)))
- goto end;
+ return;
/* compute the inherited flag to propagate */
if (mode & SRV_ADMF_MAINT)
srv_set_admin_flag(srv, mode, cause);
HA_SPIN_UNLOCK(SERVER_LOCK, &srv->lock);
}
-
- end:
- /* propagate changes */
- thread_isolate();
- srv_update_status(s);
- thread_release();
}
/* Disables admin flag <mode> (among SRV_ADMF_*) on server <s>. This is used to
s->next_admin &= ~mode;
+ /* propagate changes */
+ thread_isolate();
+ srv_update_status(s);
+ thread_release();
+
/* stop going down if the equivalent flag is still present (forced or inherited) */
if (((mode & SRV_ADMF_MAINT) && (s->next_admin & SRV_ADMF_MAINT)) ||
((mode & SRV_ADMF_DRAIN) && (s->next_admin & SRV_ADMF_DRAIN)))
- goto end;
+ return;
if (mode & SRV_ADMF_MAINT)
mode = SRV_ADMF_IMAINT;
srv_clr_admin_flag(srv, mode);
HA_SPIN_UNLOCK(SERVER_LOCK, &srv->lock);
}
-
- end:
- /* propagate changes */
- thread_isolate();
- srv_update_status(s);
- thread_release();
}
/* principle: propagate maint and drain to tracking servers. This is useful