Update Waitable API.

Instead of passing the event mask at registratrion time, pass the mask as part
of the waiter. This makes the mask immutable and simplifies the architecture of
waiters. This is also necessary for a future fix that will allow the fdnotifier
to keep persistent entries, as opposed to requiring constant updates.

This change is intended to be a no-op in terms of function. The only exception
is signalfd, where this mask was abused. To handle this case, the operation of
signalfd changed to allow one layer of indirection.

PiperOrigin-RevId: 409702998
This commit is contained in:
Adin Scannell
2021-11-13 12:54:39 -08:00
committed by gVisor bot
parent 66fb6859d1
commit 91f58d2cc8
83 changed files with 534 additions and 532 deletions
+4 -10
View File
@@ -56,12 +56,6 @@ func TestSimpleMasterToReplica(t *testing.T) {
}
}
type callback func(*waiter.Entry, waiter.EventMask)
func (cb callback) Callback(entry *waiter.Entry, mask waiter.EventMask) {
cb(entry, mask)
}
func TestEchoDeadlock(t *testing.T) {
ctx := contexttest.Context(t)
termios := linux.DefaultReplicaTermios
@@ -69,11 +63,11 @@ func TestEchoDeadlock(t *testing.T) {
ld := newLineDiscipline(termios)
outBytes := make([]byte, 32)
dst := usermem.BytesIOSequence(outBytes)
entry := &waiter.Entry{Callback: callback(func(*waiter.Entry, waiter.EventMask) {
entry := waiter.NewFunctionEntry(waiter.ReadableEvents, func(waiter.EventMask) {
ld.inputQueueRead(ctx, dst)
})}
ld.masterWaiter.EventRegister(entry, waiter.ReadableEvents)
defer ld.masterWaiter.EventUnregister(entry)
})
ld.masterWaiter.EventRegister(&entry)
defer ld.masterWaiter.EventUnregister(&entry)
inBytes := []byte("hello, tty\n")
n, err := ld.inputQueueWrite(ctx, usermem.BytesIOSequence(inBytes))
if err != nil {
+2 -2
View File
@@ -103,8 +103,8 @@ func (mfd *masterFileDescription) Release(ctx context.Context) {
}
// EventRegister implements waiter.Waitable.EventRegister.
func (mfd *masterFileDescription) EventRegister(e *waiter.Entry, mask waiter.EventMask) {
mfd.t.ld.masterWaiter.EventRegister(e, mask)
func (mfd *masterFileDescription) EventRegister(e *waiter.Entry) {
mfd.t.ld.masterWaiter.EventRegister(e)
}
// EventUnregister implements waiter.Waitable.EventUnregister.
+2 -2
View File
@@ -112,8 +112,8 @@ var _ vfs.FileDescriptionImpl = (*replicaFileDescription)(nil)
func (rfd *replicaFileDescription) Release(ctx context.Context) {}
// EventRegister implements waiter.Waitable.EventRegister.
func (rfd *replicaFileDescription) EventRegister(e *waiter.Entry, mask waiter.EventMask) {
rfd.inode.t.ld.replicaWaiter.EventRegister(e, mask)
func (rfd *replicaFileDescription) EventRegister(e *waiter.Entry) {
rfd.inode.t.ld.replicaWaiter.EventRegister(e)
}
// EventUnregister implements waiter.Waitable.EventUnregister.