Define that Server.ServeOps must wait for in-flights.

geesefs-0-30-9
Aaron Jacobs 2015-06-09 11:01:11 +10:00
parent 100c7af28a
commit 5ae9856c29
2 changed files with 9 additions and 5 deletions

View File

@ -74,7 +74,7 @@ type FileSystem interface {
// cf. http://goo.gl/jnkHPO, fuse-devel thread "Fuse guarantees on concurrent
// requests").
func NewFileSystemServer(fs FileSystem) fuse.Server {
return fileSystemServer{
return &fileSystemServer{
fs: fs,
}
}
@ -84,7 +84,9 @@ type fileSystemServer struct {
opsInFlight sync.WaitGroup
}
func (s fileSystemServer) ServeOps(c *fuse.Connection) {
func (s *fileSystemServer) ServeOps(c *fuse.Connection) {
defer s.opsInFlight.Wait()
for {
op, err := c.ReadOp()
if err == io.EOF {
@ -100,7 +102,9 @@ func (s fileSystemServer) ServeOps(c *fuse.Connection) {
}
}
func (s fileSystemServer) handleOp(op fuseops.Op) {
func (s *fileSystemServer) handleOp(op fuseops.Op) {
defer s.opsInFlight.Done()
// Delay if requested.
if *fRandomDelays {
const delayLimit = 100 * time.Microsecond
@ -176,5 +180,4 @@ func (s fileSystemServer) handleOp(op fuseops.Op) {
}
op.Respond(err)
s.opsInFlight.Done()
}

View File

@ -26,7 +26,8 @@ import (
// A type that knows how to serve ops read from a connection.
type Server interface {
// Read and serve ops from the supplied connection until EOF.
// Read and serve ops from the supplied connection until EOF. Do not return
// until all operations have been responded to.
ServeOps(*Connection)
}