mirror of
https://github.com/netbirdio/gvisor.git
synced 2026-05-22 17:12:49 -07:00
Define mq.View and use it for mqfs.queueFD.
View makes it easier to handle O_RDONLY, O_WRONLY, and ORDWR options in mq_open(2). Updates #136
This commit is contained in:
@@ -65,8 +65,8 @@ type queueFD struct {
|
||||
vfsfd vfs.FileDescription
|
||||
inode kernfs.Inode
|
||||
|
||||
// queue is the queue backing this fd.
|
||||
queue *mq.Queue
|
||||
// queue is a view into the queue backing this fd.
|
||||
queue mq.View
|
||||
}
|
||||
|
||||
// Init initializes a queueFD. Mostly copied from DynamicBytesFD.Init, but uses
|
||||
|
||||
@@ -129,6 +129,21 @@ type Queue struct {
|
||||
byteCount uint64
|
||||
}
|
||||
|
||||
// View is a view into a message queue. Views should only be used in file
|
||||
// descriptions, but not inodes, because we use inodes to retreive the actual
|
||||
// queue, and only FDs are responsible for providing user functionality.
|
||||
type View interface {
|
||||
// TODO: Add Send and Receive when mq_timedsend(2) and mq_timedreceive(2)
|
||||
// are implemented.
|
||||
|
||||
// Flush checks if the calling process has attached a notification request
|
||||
// to this queue, if yes, then the request is removed, and another process
|
||||
// can attach a request.
|
||||
Flush(ctx context.Context)
|
||||
|
||||
waiter.Waitable
|
||||
}
|
||||
|
||||
// Message holds a message exchanged through a Queue via mq_timedsend(2) and
|
||||
// mq_timedreceive(2), and additional info relating to the message.
|
||||
//
|
||||
@@ -179,9 +194,7 @@ func (q *Queue) Generate(ctx context.Context, buf *bytes.Buffer) error {
|
||||
return nil
|
||||
}
|
||||
|
||||
// Flush checks if the calling process has attached a notification request to
|
||||
// this queue, if yes, then the request is removed, and another process can
|
||||
// attach a request.
|
||||
// Flush implements View.Flush.
|
||||
func (q *Queue) Flush(ctx context.Context) {
|
||||
q.mu.Lock()
|
||||
defer q.mu.Unlock()
|
||||
|
||||
Reference in New Issue
Block a user