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}
                }