diff --git a/lib/icinga/host.cpp b/lib/icinga/host.cpp index 36149d3dc..22dd79b40 100644 --- a/lib/icinga/host.cpp +++ b/lib/icinga/host.cpp @@ -170,33 +170,29 @@ HostState Host::GetLastHardState() const * sort by severity. It is therefore easier to keep them seperated here. */ int Host::GetSeverity() const { - int severity = 0; - ObjectLock olock(this); HostState state = GetState(); if (!HasBeenChecked()) { - severity = 16; - } else if (state == HostUp) { - severity = 0; - } else { - if (IsReachable()) - severity = 64; - else - severity = 32; - - if (IsAcknowledged()) - severity += 512; - else if (IsInDowntime()) - severity += 256; - else - severity += 2048; + return 16; + } + if (state == HostUp) { + return 0; } - olock.Unlock(); + int severity = 32; // DOWN + + if (IsAcknowledged()) { + severity += 512; + } else if (IsInDowntime()) { + severity += 256; + } else if (!IsReachable()) { + severity += 1024; + } else { + severity += 2048; + } return severity; - } bool Host::IsStateOK(ServiceState state) const diff --git a/lib/icinga/service.cpp b/lib/icinga/service.cpp index d831136bb..c24647c82 100644 --- a/lib/icinga/service.cpp +++ b/lib/icinga/service.cpp @@ -111,46 +111,37 @@ Host::Ptr Service::GetHost() const * sort by severity. It is therefore easier to keep them seperated here. */ int Service::GetSeverity() const { - int severity; - ObjectLock olock(this); ServiceState state = GetStateRaw(); if (!HasBeenChecked()) { - severity = 16; - } else if (state == ServiceOK) { - severity = 0; - } else { - switch (state) { - case ServiceWarning: - severity = 32; - break; - case ServiceUnknown: - severity = 64; - break; - case ServiceCritical: - severity = 128; - break; - default: - severity = 256; - } - - Host::Ptr host = GetHost(); - ObjectLock hlock (host); - if (host->GetState() != HostUp) { - severity += 1024; - } else { - if (IsAcknowledged()) - severity += 512; - else if (IsInDowntime()) - severity += 256; - else - severity += 2048; - } - hlock.Unlock(); + return 16; + } + if (state == ServiceOK) { + return 0; } - olock.Unlock(); + int severity = 0; + + if (state == ServiceWarning) { + severity = 32; + } else if (state == ServiceUnknown) { + severity = 64; + } else if (state == ServiceCritical) { + severity = 128; + } else { + severity = 256; + } + + if (IsAcknowledged()) { + severity += 512; + } else if (IsInDowntime()) { + severity += 256; + } else if (!IsReachable()) { + severity += 1024; + } else { + severity += 2048; + } return severity; }