diff options
author | Jakob Unterwurzacher | 2016-02-06 19:27:59 +0100 |
---|---|---|
committer | Jakob Unterwurzacher | 2016-02-06 19:27:59 +0100 |
commit | 9078a77850dd680bfa938d9ed7c83600a60c0e7b (patch) | |
tree | 03ee83879c398307d450002e1f07e928cb743672 /pathfs_frontend/write_lock.go | |
parent | 2b8cbd944149afe51fadddbd67ee4499d1d86250 (diff) |
Move pathfs_frontend to internal/fusefrontend
"git status" for reference:
renamed: pathfs_frontend/args.go -> internal/fusefrontend/args.go
renamed: pathfs_frontend/compat_darwin.go -> internal/fusefrontend/compat_darwin.go
renamed: pathfs_frontend/compat_linux.go -> internal/fusefrontend/compat_linux.go
renamed: pathfs_frontend/file.go -> internal/fusefrontend/file.go
renamed: pathfs_frontend/file_holes.go -> internal/fusefrontend/file_holes.go
renamed: pathfs_frontend/fs.go -> internal/fusefrontend/fs.go
renamed: pathfs_frontend/fs_dir.go -> internal/fusefrontend/fs_dir.go
renamed: pathfs_frontend/names.go -> internal/fusefrontend/names.go
renamed: pathfs_frontend/write_lock.go -> internal/fusefrontend/write_lock.go
modified: main.go
Diffstat (limited to 'pathfs_frontend/write_lock.go')
-rw-r--r-- | pathfs_frontend/write_lock.go | 66 |
1 files changed, 0 insertions, 66 deletions
diff --git a/pathfs_frontend/write_lock.go b/pathfs_frontend/write_lock.go deleted file mode 100644 index 0704eb6..0000000 --- a/pathfs_frontend/write_lock.go +++ /dev/null @@ -1,66 +0,0 @@ -package pathfs_frontend - -import ( - "sync" -) - -func init() { - wlock.m = make(map[uint64]*refCntMutex) -} - -// wlock - serializes write accesses to each file (identified by inode number) -// Writing partial blocks means we have to do read-modify-write cycles. We -// really don't want concurrent writes there. -// Concurrent full-block writes could actually be allowed, but are not to -// keep the locking simple. -var wlock wlockMap - -// wlockMap - usage: -// 1) register -// 2) lock ... unlock ... -// 3) unregister -type wlockMap struct { - mapMutex sync.RWMutex - m map[uint64]*refCntMutex -} - -func (w *wlockMap) register(ino uint64) { - w.mapMutex.Lock() - r := w.m[ino] - if r == nil { - r = &refCntMutex{} - w.m[ino] = r - } - r.refCnt++ // this must happen inside the mapMutex lock - w.mapMutex.Unlock() -} - -func (w *wlockMap) unregister(ino uint64) { - w.mapMutex.Lock() - r := w.m[ino] - r.refCnt-- - if r.refCnt == 0 { - delete(w.m, ino) - } - w.mapMutex.Unlock() -} - -func (w *wlockMap) lock(ino uint64) { - w.mapMutex.RLock() - r := w.m[ino] - w.mapMutex.RUnlock() - r.Lock() // this can take a long time - execute outside the mapMutex lock -} - -func (w *wlockMap) unlock(ino uint64) { - w.mapMutex.RLock() - r := w.m[ino] - w.mapMutex.RUnlock() - r.Unlock() -} - -// refCntMutex - mutex with reference count -type refCntMutex struct { - sync.Mutex - refCnt int -} |