1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 package io.netty.channel.uring;
17
18
19 final class RingBuffer {
20 private final SubmissionQueue ioUringSubmissionQueue;
21 private final CompletionQueue ioUringCompletionQueue;
22 private final int features;
23 private boolean closed;
24
25 RingBuffer(SubmissionQueue ioUringSubmissionQueue,
26 CompletionQueue ioUringCompletionQueue, int features) {
27 this.ioUringSubmissionQueue = ioUringSubmissionQueue;
28 this.ioUringCompletionQueue = ioUringCompletionQueue;
29 this.features = features;
30 }
31
32
33
34
35
36 void enable() {
37
38 Native.ioUringRegisterEnableRings(fd());
39
40
41 ioUringSubmissionQueue.tryRegisterRingFd();
42 }
43
44 int fd() {
45 return ioUringCompletionQueue.ringFd;
46 }
47
48 int features() {
49 return features;
50 }
51
52 SubmissionQueue ioUringSubmissionQueue() {
53 return this.ioUringSubmissionQueue;
54 }
55
56 CompletionQueue ioUringCompletionQueue() {
57 return this.ioUringCompletionQueue;
58 }
59
60 void close() {
61 if (closed) {
62 return;
63 }
64 closed = true;
65 ioUringSubmissionQueue.close();
66 ioUringCompletionQueue.close();
67 Native.ioUringExit(
68 ioUringSubmissionQueue.submissionQueueArrayAddress(),
69 ioUringSubmissionQueue.ringEntries,
70 ioUringSubmissionQueue.ringAddress,
71 ioUringSubmissionQueue.ringSize,
72 ioUringCompletionQueue.ringAddress,
73 ioUringCompletionQueue.ringSize,
74 ioUringSubmissionQueue.ringFd,
75 ioUringSubmissionQueue.enterRingFd);
76 }
77 }