aboutsummaryrefslogtreecommitdiffstats
path: root/log/handler_go13.go
diff options
context:
space:
mode:
authorPéter Szilágyi <peterke@gmail.com>2017-02-20 23:39:36 +0800
committerPéter Szilágyi <peterke@gmail.com>2017-02-23 18:00:02 +0800
commitec7f81f4bc11c6f8203ec1d3055c9a09a244ff43 (patch)
tree5ec75ddab7749a9d0c47a97d6f638b52e6ebc6bb /log/handler_go13.go
parent29fac7de448c85049a97cbec3dc0819122bd2cb0 (diff)
downloaddexon-ec7f81f4bc11c6f8203ec1d3055c9a09a244ff43.tar.gz
dexon-ec7f81f4bc11c6f8203ec1d3055c9a09a244ff43.tar.zst
dexon-ec7f81f4bc11c6f8203ec1d3055c9a09a244ff43.zip
log, vendor: vendor in log15 inline into our codebase
Diffstat (limited to 'log/handler_go13.go')
-rw-r--r--log/handler_go13.go26
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))
+}