-/*-*- Mode: C; c-basic-offset: 8; indent-tabs-mode: nil -*-*/
-
/***
This file is part of systemd.
#include "bus-common-errors.h"
#include "bus-error.h"
#include "bus-util.h"
-#include "formats-util.h"
+#include "format-util.h"
#include "logind.h"
//#include "special.h"
#include "strv.h"
assert(m);
- if (!startswith(tty, "/dev/"))
+ if (!startswith(tty, "/dev/") || !m->scheduled_shutdown_tty)
return true;
return !streq(tty + 5, m->scheduled_shutdown_tty);
int manager_setup_wall_message_timer(Manager *m) {
usec_t n, elapse;
+#if 1 /// let's fix double wall messages in elogind - they suck.
+ usec_t left;
+#endif // 1
int r;
assert(m);
+#if 1 /// Make elogind more aware of the possibility to disable wall messages
+ /* Do not do anything if wall messages aren't enabled */
+ if (!m->enable_wall_messages)
+ return 0;
+#endif // 1
n = now(CLOCK_REALTIME);
elapse = m->scheduled_shutdown_timeout;
if (elapse < n)
return 0;
+#if 0 /// let's fix double wall messages in elogind - they suck.
/* Warn immediately if less than 15 minutes are left */
if (elapse - n < 15 * USEC_PER_MINUTE) {
r = warn_wall(m, n);
elapse = when_wall(n, elapse);
if (elapse == 0)
return 0;
+#else
+ left = elapse - n;
+ elapse = when_wall(n, elapse);
+
+ /* Warn immediately if less than 15 minutes are left, but not if
+ * there aren't more than three seconds to the next timeout. */
+ if ( (left < 15 * USEC_PER_MINUTE)
+ && (elapse > 3 * USEC_PER_SEC) ) {
+ r = warn_wall(m, n);
+ if (r == 0)
+ return 0;
+ }
+
+ /* If the next timeout is within on second, delay it by 3 seconds */
+ if (USEC_PER_SEC > elapse)
+ elapse = 3 * USEC_PER_SEC;
+#endif // 0
if (m->wall_message_timeout_source) {
r = sd_event_source_set_time(m->wall_message_timeout_source, n + elapse);