forked from keybase/client
-
Notifications
You must be signed in to change notification settings - Fork 0
/
protected_context.go
46 lines (36 loc) · 1.14 KB
/
protected_context.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
// Copyright 2017 Keybase Inc. All rights reserved.
// Use of this source code is governed by a BSD
// license that can be found in the LICENSE file.
package libkbfs
import (
"sync"
"github.com/keybase/client/go/logger"
"golang.org/x/net/context"
)
type defaultContextReplacer struct{}
func (defaultContextReplacer) maybeReplaceContext(context.Context) {}
// protectedContext is a construct that helps avoid unwanted change of context
// when the context needs to be stored.
type protectedContext struct {
mu sync.RWMutex
ctx context.Context
log logger.Logger
// defaultContextReplacer is embeded here as a helper that includes a no-op
// maybeReplaceContext, so that we can "override" the method in tests.
defaultContextReplacer
}
func newProtectedContext(
ctx context.Context, log logger.Logger) *protectedContext {
return &protectedContext{ctx: ctx, log: log}
}
func (c *protectedContext) setLogger(log logger.Logger) {
c.mu.Lock()
defer c.mu.Unlock()
c.log = log
}
// context returns the context stored in the protectedContext.
func (c *protectedContext) context() context.Context {
c.mu.RLock()
defer c.mu.RUnlock()
return c.ctx
}