Merge pull request #113 from moorereason/iss112 - afero - [fork] go afero port for 9front
(HTM) git clone git@git.drkhsh.at/afero.git
(DIR) Log
(DIR) Files
(DIR) Refs
(DIR) README
(DIR) LICENSE
---
(DIR) commit 90dd71edc4d0a8b3511dc12ea15d617d03be09e0
(DIR) parent 2f30b2a92c0e5700bcfe4715891adb1f2a7a406d
(HTM) Author: Martin Bertschler <mbertschler@gmail.com>
Date: Mon, 26 Dec 2016 10:19:39 +0100
Merge pull request #113 from moorereason/iss112
Fix data races in MemMapFs.Chmod and Chtimes
Diffstat:
M memmap.go | 22 +++++++++++++++-------
1 file changed, 15 insertions(+), 7 deletions(-)
---
(DIR) diff --git a/memmap.go b/memmap.go
@@ -128,14 +128,16 @@ func (m *MemMapFs) Mkdir(name string, perm os.FileMode) error {
m.mu.RUnlock()
if ok {
return &os.PathError{"mkdir", name, ErrFileExists}
- } else {
- m.mu.Lock()
- item := mem.CreateDir(name)
- m.getData()[name] = item
- m.registerWithParent(item)
- m.mu.Unlock()
- m.Chmod(name, perm)
}
+
+ m.mu.Lock()
+ item := mem.CreateDir(name)
+ m.getData()[name] = item
+ m.registerWithParent(item)
+ m.mu.Unlock()
+
+ m.Chmod(name, perm)
+
return nil
}
@@ -313,7 +315,10 @@ func (m *MemMapFs) Stat(name string) (os.FileInfo, error) {
func (m *MemMapFs) Chmod(name string, mode os.FileMode) error {
name = normalizePath(name)
+
+ m.mu.RLock()
f, ok := m.getData()[name]
+ m.mu.RUnlock()
if !ok {
return &os.PathError{"chmod", name, ErrFileNotFound}
}
@@ -327,7 +332,10 @@ func (m *MemMapFs) Chmod(name string, mode os.FileMode) error {
func (m *MemMapFs) Chtimes(name string, atime time.Time, mtime time.Time) error {
name = normalizePath(name)
+
+ m.mu.RLock()
f, ok := m.getData()[name]
+ m.mu.RUnlock()
if !ok {
return &os.PathError{"chtimes", name, ErrFileNotFound}
}