mirror of
https://github.com/netbirdio/gvisor.git
synced 2026-05-22 17:12:49 -07:00
Remove waiter.Entry.Context
This field is redundant since state can be stored in the callback. PiperOrigin-RevId: 318134855
This commit is contained in:
committed by
gVisor bot
parent
b070e218c6
commit
10930b0f8c
@@ -271,11 +271,13 @@ func (e *EventPoll) ReadEvents(max int) []linux.EpollEvent {
|
||||
|
||||
// readyCallback is called when one of the files we're polling becomes ready. It
|
||||
// moves said file to the readyList if it's currently in the waiting list.
|
||||
type readyCallback struct{}
|
||||
type readyCallback struct {
|
||||
context *pollEntry
|
||||
}
|
||||
|
||||
// Callback implements waiter.EntryCallback.Callback.
|
||||
func (*readyCallback) Callback(w *waiter.Entry) {
|
||||
entry := w.Context.(*pollEntry)
|
||||
func (r *readyCallback) Callback(*waiter.Entry) {
|
||||
entry := r.context
|
||||
e := entry.epoll
|
||||
|
||||
e.listsMu.Lock()
|
||||
@@ -310,7 +312,7 @@ func (e *EventPoll) initEntryReadiness(entry *pollEntry) {
|
||||
// Check if the file happens to already be in a ready state.
|
||||
ready := f.Readiness(entry.mask) & entry.mask
|
||||
if ready != 0 {
|
||||
(*readyCallback).Callback(nil, &entry.waiter)
|
||||
(&readyCallback{context: entry}).Callback(&entry.waiter)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -380,10 +382,9 @@ func (e *EventPoll) AddEntry(id FileIdentifier, flags EntryFlags, mask waiter.Ev
|
||||
userData: data,
|
||||
epoll: e,
|
||||
flags: flags,
|
||||
waiter: waiter.Entry{Callback: &readyCallback{}},
|
||||
mask: mask,
|
||||
}
|
||||
entry.waiter.Context = entry
|
||||
entry.waiter.Callback = &readyCallback{context: entry}
|
||||
e.files[id] = entry
|
||||
entry.file = refs.NewWeakRef(id.File, entry)
|
||||
|
||||
|
||||
@@ -21,8 +21,7 @@ import (
|
||||
|
||||
// afterLoad is invoked by stateify.
|
||||
func (p *pollEntry) afterLoad() {
|
||||
p.waiter = waiter.Entry{Callback: &readyCallback{}}
|
||||
p.waiter.Context = p
|
||||
p.waiter.Callback = &readyCallback{context: p}
|
||||
p.file = refs.NewWeakRef(p.id.File, p)
|
||||
p.id.File.EventRegister(&p.waiter, p.mask)
|
||||
}
|
||||
|
||||
+6
-12
@@ -128,13 +128,6 @@ type EntryCallback interface {
|
||||
//
|
||||
// +stateify savable
|
||||
type Entry struct {
|
||||
// Context stores any state the waiter may wish to store in the entry
|
||||
// itself, which may be used at wake up time.
|
||||
//
|
||||
// Note that use of this field is optional and state may alternatively be
|
||||
// stored in the callback itself.
|
||||
Context interface{}
|
||||
|
||||
Callback EntryCallback
|
||||
|
||||
// The following fields are protected by the queue lock.
|
||||
@@ -142,13 +135,14 @@ type Entry struct {
|
||||
waiterEntry
|
||||
}
|
||||
|
||||
type channelCallback struct{}
|
||||
type channelCallback struct {
|
||||
ch chan struct{}
|
||||
}
|
||||
|
||||
// Callback implements EntryCallback.Callback.
|
||||
func (*channelCallback) Callback(e *Entry) {
|
||||
ch := e.Context.(chan struct{})
|
||||
func (c *channelCallback) Callback(*Entry) {
|
||||
select {
|
||||
case ch <- struct{}{}:
|
||||
case c.ch <- struct{}{}:
|
||||
default:
|
||||
}
|
||||
}
|
||||
@@ -164,7 +158,7 @@ func NewChannelEntry(c chan struct{}) (Entry, chan struct{}) {
|
||||
c = make(chan struct{}, 1)
|
||||
}
|
||||
|
||||
return Entry{Context: c, Callback: &channelCallback{}}, c
|
||||
return Entry{Callback: &channelCallback{ch: c}}, c
|
||||
}
|
||||
|
||||
// Queue represents the wait queue where waiters can be added and
|
||||
|
||||
Reference in New Issue
Block a user