Unlock mutexes on failed up/downgrade

Signed-off-by: kim (grufwub) <grufwub@gmail.com>
master
kim (grufwub) 4 years ago
parent 7b3ce5115d
commit b151bc8eba

@ -307,16 +307,18 @@ func (fs *FileSystemObject) FetchFile(client *Client, fd *os.File, stat os.FileI
return err return err
} }
// Try upgrade our lock, else error out // Try upgrade our lock, else error out (have to remember to unlock!!)
if !fs.UpgradeLock() { if !fs.UpgradeLock() {
fs.Unlock()
return NewError(MutexUpgradeErr) return NewError(MutexUpgradeErr)
} }
// Put file in cache // Put file in cache
fs.cache.Put(p.Absolute(), f) fs.cache.Put(p.Absolute(), f)
// Try downgrade our lock, else error out // Try downgrade our lock, else error out (have to remember to runlock!!)
if !fs.DowngradeLock() { if !fs.DowngradeLock() {
fs.RUnlock()
return NewError(MutexDowngradeErr) return NewError(MutexDowngradeErr)
} }
@ -328,8 +330,9 @@ func (fs *FileSystemObject) FetchFile(client *Client, fd *os.File, stat os.FileI
// Check for file freshness // Check for file freshness
if !f.IsFresh() { if !f.IsFresh() {
// Try upgrade file lock, else error out // Try upgrade file lock, else error out (have to remember to unlock!!)
if !f.UpgradeLock() { if !f.UpgradeLock() {
f.Unlock()
return NewError(MutexUpgradeErr) return NewError(MutexUpgradeErr)
} }
@ -341,8 +344,9 @@ func (fs *FileSystemObject) FetchFile(client *Client, fd *os.File, stat os.FileI
return err return err
} }
// Try downgrade file lock, else error out // Try downgrade file lock, else error out (have to remember to runlock!!)
if !f.DowngradeLock() { if !f.DowngradeLock() {
f.RUnlock()
return NewError(MutexDowngradeErr) return NewError(MutexDowngradeErr)
} }
} }

Loading…
Cancel
Save