Commit 8010a834 authored by Aaron Jacobs's avatar Aaron Jacobs

InterruptFS.WaitForReadInFlight

parent fe14fa8f
...@@ -17,6 +17,7 @@ package interruptfs ...@@ -17,6 +17,7 @@ package interruptfs
import ( import (
"fmt" "fmt"
"os" "os"
"sync"
"github.com/jacobsa/fuse" "github.com/jacobsa/fuse"
"github.com/jacobsa/fuse/fuseops" "github.com/jacobsa/fuse/fuseops"
...@@ -42,10 +43,16 @@ var fooAttrs = fuseops.InodeAttributes{ ...@@ -42,10 +43,16 @@ var fooAttrs = fuseops.InodeAttributes{
// Must be created with New. // Must be created with New.
type InterruptFS struct { type InterruptFS struct {
fuseutil.NotImplementedFileSystem fuseutil.NotImplementedFileSystem
mu sync.Mutex
readInFlight bool
readInFlightChanged sync.Cond
} }
func New() (fs *InterruptFS) { func New() (fs *InterruptFS) {
fs = &InterruptFS{} fs = &InterruptFS{}
fs.readInFlightChanged.L = &fs.mu
return return
} }
...@@ -53,11 +60,16 @@ func New() (fs *InterruptFS) { ...@@ -53,11 +60,16 @@ func New() (fs *InterruptFS) {
// Public interface // Public interface
//////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////
// Block until there is a read in flight. // Block until the first read is received.
// //
// LOCKS_EXCLUDED(fs.mu) // LOCKS_EXCLUDED(fs.mu)
func (fs *InterruptFS) WaitForReadInFlight() { func (fs *InterruptFS) WaitForReadInFlight() {
panic("TODO") fs.mu.Lock()
defer fs.mu.Unlock()
for !fs.readInFlight {
fs.readInFlightChanged.Wait()
}
} }
//////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment