Improved thread safety

This commit is contained in:
2016-04-02 11:18:17 +02:00
parent ba91d7ed92
commit 6cc2caf62a
17 changed files with 261 additions and 109 deletions
+39 -33
View File
@@ -41,56 +41,62 @@ namespace Ntp.System
{
Error = 0,
Exit,
Reload,
Refresh,
Reload
Notify
}
#if __MonoCS__
public static Signal Wait (string name, LogBase log)
{
UnixSignal sigterm, sigquit, sigint, sighup, sigusr1, sigusr2;
UnixSignal[] signals = new UnixSignal[] {
new UnixSignal (Signum.SIGTERM),
new UnixSignal (Signum.SIGQUIT),
new UnixSignal (Signum.SIGINT),
new UnixSignal (Signum.SIGHUP),
new UnixSignal (Signum.SIGUSR1)
sigint = new UnixSignal (Signum.SIGINT),
sigterm = new UnixSignal (Signum.SIGTERM),
sigquit = new UnixSignal (Signum.SIGQUIT),
sighup = new UnixSignal (Signum.SIGHUP),
sigusr1 = new UnixSignal (Signum.SIGUSR1),
sigusr2 = new UnixSignal (Signum.SIGUSR2)
};
int sig = 0;
int i = 0;
while (true) {
try {
sig = UnixSignal.WaitAny (signals, -1);
i = UnixSignal.WaitAny (signals, -1);
} catch (Exception e) {
log.WriteLine ("Error in Signum handling.", Severity.Error);
log.WriteLine ("Unrecoverable error in UnixSignal.WaitAny()",
Severity.Error);
log.WriteLine (e, Severity.Trace);
return Signal.Error;
}
if (sig >= 0 && sig < signals.Length) {
Signum signal = signals [sig].Signum;
if (i < 0 || i >= signals.Length) {
log.WriteLine (String.Format (
"Received unknown signal {0}",
signals [i].Signum.ToString ()),
Severity.Warn);
continue;
}
switch (signal) {
case Signum.SIGINT:
log.WriteLine ("Interrupted.", Severity.Notice);
return Signal.Exit;
case Signum.SIGTERM:
log.WriteLine ("Received kill signal.", Severity.Notice);
return Signal.Exit;
case Signum.SIGQUIT:
log.WriteLine ("Received quit signal.", Severity.Notice);
return Signal.Exit;
case Signum.SIGHUP:
log.WriteLine ("Received log restart signal.", Severity.Debug);
return Signal.Refresh;
case Signum.SIGUSR1:
log.WriteLine ("Received reload config signal.", Severity.Debug);
return Signal.Reload;
default:
log.WriteLine ("Unknown signal received.", Severity.Warn);
break;
}
} else {
log.WriteLine ("Unknown signal received.", Severity.Warn);
log.WriteLine (String.Format (
"Received signal {0}",
signals [i].Signum.ToString ()),
Severity.Debug);
if (sigint.IsSet || sigterm.IsSet || sigquit.IsSet) {
sigint.Reset ();
sigterm.Reset ();
sigquit.Reset ();
return Signal.Exit;
} else if (sighup.IsSet) {
sighup.Reset ();
return Signal.Refresh;
} else if (sigusr1.IsSet) {
sigusr1.Reset ();
return Signal.Reload;
} else if (sigusr2.IsSet) {
sigusr2.Reset ();
return Signal.Notify;
}
}
}
+1 -1
View File
@@ -29,7 +29,7 @@ namespace Ntp.System
{
public static class VersionInfo
{
public static readonly string Number = "0.4b";
public static readonly string Number = "0.4.2b";
public static readonly string Text = "v" + Number;
}