Define explicit ownership for custom appenders and formatters
Add SharedLogState for synchronized value data and factories for independently owned appender state and captured formatter closures. Reject unsafe configuration state, update the test collector to value snapshots, and document the breaking APIs in version 3.0.0. Expand ORC ownership and sanitizer coverage and reject stale test executables.
This commit is contained in:
1 parent
851caef706
commit
b2d0e9dade
11 files changed
+808
-110
No files matched your search
@@ -1,5 +1,6 @@
|
||||
import std/[os, osproc, strutils, tempfiles, unittest]
|
||||
import ../src/namespaced_logging
|
||||
import ./ownership
|
||||
|
||||
type
|
||||
CloneControl = object
|
||||
@@ -16,18 +17,19 @@ method clone(app: FallibleAppender): LogAppender {.gcsafe.} =
|
||||
type
|
||||
LifetimeProbeObj = object
|
||||
destroyed: ptr int
|
||||
LifetimeProbe = ref LifetimeProbeObj
|
||||
LifetimeProbe = SharedLogState[LifetimeProbeObj]
|
||||
|
||||
proc `=destroy`(probe: LifetimeProbeObj) =
|
||||
inc probe.destroyed[]
|
||||
if probe.destroyed != nil:
|
||||
inc probe.destroyed[]
|
||||
|
||||
proc ignoreMessage(state: LifetimeProbe, msg: LogMessage) {.gcsafe, noconv.} =
|
||||
proc ignoreMessage(state: var LifetimeProbe, msg: LogMessage) {.gcsafe, noconv.} =
|
||||
discard
|
||||
|
||||
proc watchedService(destroyed: ptr int): LogService =
|
||||
result = initLogService()
|
||||
result.addAppender(initCustomLogAppender(
|
||||
LifetimeProbe(destroyed: destroyed), ignoreMessage))
|
||||
initSharedLogState(LifetimeProbeObj(destroyed: destroyed)), ignoreMessage))
|
||||
|
||||
proc createAndReleaseService(destroyed: ptr int) =
|
||||
var service = watchedService(destroyed)
|
||||
|
||||
Reference in new issue
Block a user