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:
Zyad A. Ali
2021-09-28 20:43:52 +02:00
parent b2be0611cd
commit 7508a0efee
2 changed files with 18 additions and 5 deletions
+2 -2
View File
@@ -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
+16 -3
View File
@@ -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()