summaryrefslogtreecommitdiffhomepage
path: root/pkg/sentry/kernel/mq/mq.go
diff options
context:
space:
mode:
authorZyad A. Ali <zyad.ali.me@gmail.com>2021-07-29 22:17:26 +0200
committerZyad A. Ali <zyad.ali.me@gmail.com>2021-09-28 20:43:52 +0200
commit7508a0efeeef19a3e08e06e80be8258743438412 (patch)
tree653ddcb5134c383a2987d92d1cbc21881714e083 /pkg/sentry/kernel/mq/mq.go
parentb2be0611cd75b83eafc5ec5e7a0fbaeb1eaf9663 (diff)
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
Diffstat (limited to 'pkg/sentry/kernel/mq/mq.go')
-rw-r--r--pkg/sentry/kernel/mq/mq.go19
1 files changed, 16 insertions, 3 deletions
diff --git a/pkg/sentry/kernel/mq/mq.go b/pkg/sentry/kernel/mq/mq.go
index 739ea2f1c..954883c5f 100644
--- a/pkg/sentry/kernel/mq/mq.go
+++ b/pkg/sentry/kernel/mq/mq.go
@@ -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()