Bugfix: Print correct error message if bootstrap is called multiple times (#57)

MetricsSystem.bootstrap verifies that the metric system has not been previously
initialized. Otherwise it should fail with a corresponding error message. The
precondition error message includes the name of the currently used factory and
for that accesses self.factory. However, because bootstrap already holds
self.lock as a writer lock, self.factory fails to get it as a reader and
crashes with a less useful precondition error message. This commit ensures that
the correct error message is printed.
This commit is contained in:
Christian Priebe 2020-02-10 19:11:28 +00:00 committed by GitHub
parent aa197a1c15
commit f1514a4c74
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 1 additions and 1 deletions

View File

@ -346,7 +346,7 @@ public enum MetricsSystem {
/// - factory: A factory that given an identifier produces instances of metrics handlers such as `CounterHandler`, `RecorderHandler` and `TimerHandler`.
public static func bootstrap(_ factory: MetricsFactory) {
self.lock.withWriterLock {
precondition(!self.initialized, "metrics system can only be initialized once per process. currently used factory: \(self.factory)")
precondition(!self.initialized, "metrics system can only be initialized once per process. currently used factory: \(self._factory)")
self._factory = factory
self.initialized = true
}