@@ -109,8 +109,10 @@ func Open(dirname string, opts *Options) (db *DB, err error) {
109109 }
110110 defer maybeCleanUp (dataDir .Close )
111111
112+ var dirLocks base.DirLockSet
113+
112114 // Lock the database directory.
113- fileLock , err := base . AcquireOrValidateDirectoryLock (opts .Lock , dirname , opts .FS )
115+ fileLock , err := dirLocks . AcquireOrValidate (opts .Lock , dirname , opts .FS )
114116 if err != nil {
115117 return nil , err
116118 }
@@ -336,7 +338,7 @@ func Open(dirname string, opts *Options) (db *DB, err error) {
336338
337339 // Lock the dedicated WAL directory, if configured.
338340 if walDirname != dirname {
339- walOpts .Primary .Lock , err = base . AcquireOrValidateDirectoryLock (opts .WALDirLock , walDirname , opts .FS )
341+ walOpts .Primary .Lock , err = dirLocks . AcquireOrValidate (opts .WALDirLock , walDirname , opts .FS )
340342 if err != nil {
341343 return nil , err
342344 }
@@ -346,7 +348,7 @@ func Open(dirname string, opts *Options) (db *DB, err error) {
346348 // Lock the secondary WAL directory, if distinct from the data directory
347349 // and primary WAL directory.
348350 if secondaryWalDirName != dirname && secondaryWalDirName != walDirname {
349- walOpts .Secondary .Lock , err = base . AcquireOrValidateDirectoryLock (
351+ walOpts .Secondary .Lock , err = dirLocks . AcquireOrValidate (
350352 opts .WALFailover .Secondary .Lock , secondaryWalDirName , opts .WALFailover .Secondary .FS )
351353 if err != nil {
352354 return nil , err
@@ -359,21 +361,13 @@ func Open(dirname string, opts *Options) (db *DB, err error) {
359361 })
360362 }
361363 walDirs := walOpts .Dirs ()
362- walRecoveryLocks := make ([]* base.DirLock , len (opts .WALRecoveryDirs ))
363- defer func () {
364- // We only need the recovery WALs during Open, so we can release
365- // the locks after the WALs have been scanned.
366- for _ , l := range walRecoveryLocks {
367- if l != nil {
368- _ = l .Close ()
369- }
370- }
371- }()
372- for i , dir := range opts .WALRecoveryDirs {
364+ var recoveryDirLocks base.DirLockSet
365+ defer func () { _ = recoveryDirLocks .Close () }()
366+ for _ , dir := range opts .WALRecoveryDirs {
373367 dir .Dirname = resolveStorePath (dirname , dir .Dirname )
374368 if dir .Dirname != dirname {
375369 // Acquire a lock on the WAL recovery directory.
376- walRecoveryLocks [ i ] , err = base . AcquireOrValidateDirectoryLock (dir .Lock , dir .Dirname , dir .FS )
370+ _ , err = recoveryDirLocks . AcquireOrValidate (dir .Lock , dir .Dirname , dir .FS )
377371 if err != nil {
378372 return nil , errors .Wrapf (err , "error acquiring lock on WAL recovery directory %q" , dir .Dirname )
379373 }
0 commit comments