diff options
Diffstat (limited to 'log/handler_go13.go')
-rw-r--r-- | log/handler_go13.go | 26 |
1 files changed, 26 insertions, 0 deletions
diff --git a/log/handler_go13.go b/log/handler_go13.go new file mode 100644 index 000000000..0843ed0e5 --- /dev/null +++ b/log/handler_go13.go @@ -0,0 +1,26 @@ +// +build !go1.4 + +package log + +import ( + "sync/atomic" + "unsafe" +) + +// swapHandler wraps another handler that may be swapped out +// dynamically at runtime in a thread-safe fashion. +type swapHandler struct { + handler unsafe.Pointer +} + +func (h *swapHandler) Log(r *Record) error { + return h.Get().Log(r) +} + +func (h *swapHandler) Get() Handler { + return *(*Handler)(atomic.LoadPointer(&h.handler)) +} + +func (h *swapHandler) Swap(newHandler Handler) { + atomic.StorePointer(&h.handler, unsafe.Pointer(&newHandler)) +} |