github.com/scaleoutsean/fusego@v0.0.0-20220224074057-4a6429e46bb8/mounted_file_system.go (about) 1 // Copyright 2015 Google Inc. All Rights Reserved. 2 // 3 // Licensed under the Apache License, Version 2.0 (the "License"); 4 // you may not use this file except in compliance with the License. 5 // You may obtain a copy of the License at 6 // 7 // http://www.apache.org/licenses/LICENSE-2.0 8 // 9 // Unless required by applicable law or agreed to in writing, software 10 // distributed under the License is distributed on an "AS IS" BASIS, 11 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 // See the License for the specific language governing permissions and 13 // limitations under the License. 14 15 package fuse 16 17 import "context" 18 19 // MountedFileSystem represents the status of a mount operation, with a method 20 // that waits for unmounting. 21 type MountedFileSystem struct { 22 dir string 23 24 // The result to return from Join. Not valid until the channel is closed. 25 joinStatus error 26 joinStatusAvailable chan struct{} 27 } 28 29 // Dir returns the directory on which the file system is mounted (or where we 30 // attempted to mount it.) 31 func (mfs *MountedFileSystem) Dir() string { 32 return mfs.dir 33 } 34 35 // Join blocks until a mounted file system has been unmounted. It does not 36 // return successfully until all ops read from the connection have been 37 // responded to (i.e. the file system server has finished processing all 38 // in-flight ops). 39 // 40 // The return value will be non-nil if anything unexpected happened while 41 // serving. May be called multiple times. 42 func (mfs *MountedFileSystem) Join(ctx context.Context) error { 43 select { 44 case <-mfs.joinStatusAvailable: 45 return mfs.joinStatus 46 case <-ctx.Done(): 47 return ctx.Err() 48 } 49 }