MEDIUM: mworker/systemd: send STATUS over sd_notify

The sd_notify API is not able to change the "Active:" line in "systemcl
status". However a message can still be displayed on a "Status: " line,
even if the service is still green and "active (running)".

When startup succeed the Status will be set to "Ready.", upon a reload
it will be set to "Reloading Configuration." If the configuration
succeed "Ready." again. However if the reload failed, it will be set to
"Reload failed!".

Keep in mind that the "Active:" line won't change upon a reload failure,
and will still be green.
diff --git a/src/haproxy.c b/src/haproxy.c
index 85467a5..513a967 100644
--- a/src/haproxy.c
+++ b/src/haproxy.c
@@ -682,10 +682,6 @@
 	struct mworker_proc *current_child = NULL;
 
 	mworker_block_signals();
-#if defined(USE_SYSTEMD)
-	if (global.tune.options & GTUNE_USE_SYSTEMD)
-		sd_notify(0, "RELOADING=1");
-#endif
 	setenv("HAPROXY_MWORKER_REEXEC", "1", 1);
 
 	mworker_cleanup_proc();
@@ -802,16 +798,16 @@
 		child->reloads++;
 	}
 
+#if defined(USE_SYSTEMD)
+	if (global.tune.options & GTUNE_USE_SYSTEMD)
+		sd_notify(0, "RELOADING=1\nSTATUS=Reloading Configuration.\n");
+#endif
 	mworker_reexec();
 }
 
 static void mworker_loop()
 {
 
-#if defined(USE_SYSTEMD)
-	if (global.tune.options & GTUNE_USE_SYSTEMD)
-		sd_notifyf(0, "READY=1\nMAINPID=%lu", (unsigned long)getpid());
-#endif
 	/* Busy polling makes no sense in the master :-) */
 	global.tune.options &= ~GTUNE_BUSY_POLLING;
 
@@ -877,6 +873,13 @@
 
 	usermsgs_clr(NULL);
 	ha_warning("Loading failure!\n");
+#if defined(USE_SYSTEMD)
+	/* the sd_notify API is not able to send a reload failure signal. So
+	 * the READY=1 signal still need to be sent */
+	if (global.tune.options & GTUNE_USE_SYSTEMD)
+		sd_notify(0, "READY=1\nSTATUS=Reload failed!\n");
+#endif
+
 	mworker_reexec_waitmode();
 }
 
@@ -3440,6 +3443,10 @@
 					mworker_loop();
 				} else {
 
+#if defined(USE_SYSTEMD)
+					if (global.tune.options & GTUNE_USE_SYSTEMD)
+						sd_notifyf(0, "READY=1\nMAINPID=%lu\nSTATUS=Ready.\n", (unsigned long)getpid());
+#endif
 					/* if not in wait mode, reload in wait mode to free the memory */
 					ha_notice("Loading success.\n");
 					proc_self->failedreloads = 0; /* reset the number of failure */