aboutsummaryrefslogtreecommitdiff
path: root/src/socket.c
diff options
context:
space:
mode:
authorSergey Poznyakoff <gray@gnu.org>2016-02-28 20:42:50 +0200
committerSergey Poznyakoff <gray@gnu.org>2016-02-28 21:39:28 +0200
commit0d0a148121dcb8edd49cad900f27141336576f9d (patch)
treed458628bb80d5972f540826e1cf3fc8b8224265b /src/socket.c
parent14e0802da5587179607f3340d105914435ee117a (diff)
downloadpies-0d0a148121dcb8edd49cad900f27141336576f9d.tar.gz
pies-0d0a148121dcb8edd49cad900f27141336576f9d.tar.bz2
Synchronize changes in runlevel with configuration reloads
State transition algorithm used this far could cause spurious component wakeups in some cases. Consider the following scenario: being in runlevel N, the configuration is changed so that a component X is added at runlevel N. Then a change to runlevel N+1 is initiated. What happens then is that X is woken up (still being in runlevel N) and terminated shortly afterwards, upon entering runlevel N+1. To avoid this, configuration must be reloaded after runlevel changes. * src/ctl.c (res_runlevel): Don't initiate ACTION_RELOAD after setting the runlevel. * src/pies.c (main): Begin main event loop with call to pies_pause. * src/pies.h (pies_set_hook): New proto. (inittrans): Remove proto. * src/socket.c (pies_set_hook): New function. (pies_pause): Call pies_pause_hook if defined. * src/sysvinit.c (inittrans): Change to static. If transition was initiated by user (e.g. by invoking telinit), schedule ACTION_RELOAD. (sysvinit_begin): Set inittrans as pies_hook
Diffstat (limited to 'src/socket.c')
-rw-r--r--src/socket.c11
1 files changed, 11 insertions, 0 deletions
diff --git a/src/socket.c b/src/socket.c
index 2b2bc52..0a0a3a9 100644
--- a/src/socket.c
+++ b/src/socket.c
@@ -559,9 +559,20 @@ enable_socket (int fd)
FD_SET (fd, &fdset[PIES_EVT_EX]);
}
+static int (*pies_pause_hook) (void);
+
+void
+pies_set_hook (int (*f) (void))
+{
+ pies_pause_hook = f;
+}
+
void
pies_pause (void)
{
+ if (pies_pause_hook && pies_pause_hook ())
+ return;
+
if (fd_max == -1)
calc_fd_max ();

Return to:

Send suggestions and report system problems to the System administrator.