Skip to content

Commit 4497728

Browse files
authored
Add a name to mutexes to make them unexported (hypermodeinc#1678)
By embedding sync.Mutex into an exported struct, it also exports the Lock() and Unlock() functions. This can cause trouble/confusion for users of Badger because Lock() is used internally and calling it can have unintended consequences. By naming the mutex, and not embedding it, the internally-used Lock and Unlock are not exposed to the user.
1 parent d66dff2 commit 4497728

File tree

2 files changed

+24
-24
lines changed

2 files changed

+24
-24
lines changed

db.go

Lines changed: 22 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -93,7 +93,7 @@ func (lk *lockedKeys) all() []uint64 {
9393
// DB provides the various functions required to interact with Badger.
9494
// DB is thread-safe.
9595
type DB struct {
96-
sync.RWMutex // Guards list of inmemory tables, not individual reads and writes.
96+
lock sync.RWMutex // Guards list of inmemory tables, not individual reads and writes.
9797

9898
dirLockGuard *directoryLockGuard
9999
// nil if Dir and ValueDir are the same
@@ -432,15 +432,15 @@ func (db *DB) MaxVersion() uint64 {
432432
maxVersion = a
433433
}
434434
}
435-
db.Lock()
435+
db.lock.Lock()
436436
// In read only mode, we do not create new mem table.
437437
if !db.opt.ReadOnly {
438438
update(db.mt.maxVersion)
439439
}
440440
for _, mt := range db.imm {
441441
update(mt.maxVersion)
442442
}
443-
db.Unlock()
443+
db.lock.Unlock()
444444
for _, ti := range db.Tables() {
445445
update(ti.MaxVersion)
446446
}
@@ -582,8 +582,8 @@ func (db *DB) close() (err error) {
582582
db.opt.Debugf("Flushing memtable")
583583
for {
584584
pushedFlushTask := func() bool {
585-
db.Lock()
586-
defer db.Unlock()
585+
db.lock.Lock()
586+
defer db.lock.Unlock()
587587
y.AssertTrue(db.mt != nil)
588588
select {
589589
case db.flushChan <- flushTask{mt: db.mt}:
@@ -689,8 +689,8 @@ func (db *DB) Sync() error {
689689

690690
// getMemtables returns the current memtables and get references.
691691
func (db *DB) getMemTables() ([]*memTable, func()) {
692-
db.RLock()
693-
defer db.RUnlock()
692+
db.lock.RLock()
693+
defer db.lock.RUnlock()
694694

695695
var tables []*memTable
696696

@@ -984,8 +984,8 @@ var errNoRoom = errors.New("No room for write")
984984
// ensureRoomForWrite is always called serially.
985985
func (db *DB) ensureRoomForWrite() error {
986986
var err error
987-
db.Lock()
988-
defer db.Unlock()
987+
db.lock.Lock()
988+
defer db.lock.Unlock()
989989

990990
y.AssertTrue(db.mt != nil) // A nil mt indicates that DB is being closed.
991991
if !db.mt.isFull() {
@@ -1089,7 +1089,7 @@ func (db *DB) flushMemtable(lc *z.Closer) error {
10891089
err := db.handleFlushTask(ft)
10901090
if err == nil {
10911091
// Update s.imm. Need a lock.
1092-
db.Lock()
1092+
db.lock.Lock()
10931093
// This is a single-threaded operation. ft.mt corresponds to the head of
10941094
// db.imm list. Once we flush it, we advance db.imm. The next ft.mt
10951095
// which would arrive here would match db.imm[0], because we acquire a
@@ -1098,7 +1098,7 @@ func (db *DB) flushMemtable(lc *z.Closer) error {
10981098
y.AssertTrue(ft.mt == db.imm[0])
10991099
db.imm = db.imm[1:]
11001100
ft.mt.DecrRef() // Return memory.
1101-
db.Unlock()
1101+
db.lock.Unlock()
11021102

11031103
break
11041104
}
@@ -1235,7 +1235,7 @@ func (db *DB) Size() (lsm, vlog int64) {
12351235

12361236
// Sequence represents a Badger sequence.
12371237
type Sequence struct {
1238-
sync.Mutex
1238+
lock sync.Mutex
12391239
db *DB
12401240
key []byte
12411241
next uint64
@@ -1246,8 +1246,8 @@ type Sequence struct {
12461246
// Next would return the next integer in the sequence, updating the lease by running a transaction
12471247
// if needed.
12481248
func (seq *Sequence) Next() (uint64, error) {
1249-
seq.Lock()
1250-
defer seq.Unlock()
1249+
seq.lock.Lock()
1250+
defer seq.lock.Unlock()
12511251
if seq.next >= seq.leased {
12521252
if err := seq.updateLease(); err != nil {
12531253
return 0, err
@@ -1262,8 +1262,8 @@ func (seq *Sequence) Next() (uint64, error) {
12621262
// before closing the associated DB. However it is valid to use the sequence after
12631263
// it was released, causing a new lease with full bandwidth.
12641264
func (seq *Sequence) Release() error {
1265-
seq.Lock()
1266-
defer seq.Unlock()
1265+
seq.lock.Lock()
1266+
defer seq.lock.Unlock()
12671267
err := seq.db.Update(func(txn *Txn) error {
12681268
item, err := txn.Get(seq.key)
12691269
if err != nil {
@@ -1425,8 +1425,8 @@ func (db *DB) KeySplits(prefix []byte) []string {
14251425
_ = iter.Close()
14261426
}
14271427

1428-
db.Lock()
1429-
defer db.Unlock()
1428+
db.lock.Lock()
1429+
defer db.lock.Unlock()
14301430
var memTables []*memTable
14311431
memTables = append(memTables, db.imm...)
14321432
for _, mt := range memTables {
@@ -1660,8 +1660,8 @@ func (db *DB) dropAll() (func(), error) {
16601660
f()
16611661
}
16621662
// Block all foreign interactions with memory tables.
1663-
db.Lock()
1664-
defer db.Unlock()
1663+
db.lock.Lock()
1664+
defer db.lock.Unlock()
16651665

16661666
// Remove inmemory tables. Calling DecrRef for safety. Not sure if they're absolutely needed.
16671667
db.mt.DecrRef()
@@ -1724,8 +1724,8 @@ func (db *DB) DropPrefix(prefixes ...[]byte) error {
17241724
return nil
17251725
}
17261726
// Block all foreign interactions with memory tables.
1727-
db.Lock()
1728-
defer db.Unlock()
1727+
db.lock.Lock()
1728+
defer db.lock.Unlock()
17291729

17301730
db.imm = append(db.imm, db.mt)
17311731
for _, memtable := range db.imm {

db_test.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2060,15 +2060,15 @@ func TestForceFlushMemtable(t *testing.T) {
20602060
// We want to make sure that memtable is flushed on disk. While flushing memtable to disk,
20612061
// latest head is also stored in it. Hence we will try to read head from disk. To make sure
20622062
// this. we will truncate all memtables.
2063-
db.Lock()
2063+
db.lock.Lock()
20642064
db.mt.DecrRef()
20652065
for _, mt := range db.imm {
20662066
mt.DecrRef()
20672067
}
20682068
db.imm = db.imm[:0]
20692069
db.mt, err = db.newMemTable()
20702070
require.NoError(t, err)
2071-
db.Unlock()
2071+
db.lock.Unlock()
20722072

20732073
// Since we are inserting 3 entries and ValueLogMaxEntries is 1, there will be 3 rotation.
20742074
require.True(t, db.nextMemFid == 3,

0 commit comments

Comments
 (0)