| 53 | private long idSeq; |
| 54 | |
| 55 | public IOURingImpl(IOURingFacade facade, int capacity) { |
| 56 | assert Numbers.isPow2(capacity); |
| 57 | this.facade = facade; |
| 58 | final long res = facade.create(capacity); |
| 59 | if (res < 0) { |
| 60 | throw CairoException.critical((int) -res).put("Cannot create io_uring instance"); |
| 61 | } |
| 62 | this.ringAddr = res; |
| 63 | |
| 64 | int ringFd = Unsafe.getInt(ringAddr + RING_FD_OFFSET); |
| 65 | |
| 66 | this.sqesAddr = Unsafe.getLong(ringAddr + SQ_SQES_OFFSET); |
| 67 | this.sqKheadAddr = Unsafe.getLong(ringAddr + SQ_KHEAD_OFFSET); |
| 68 | final long sqMaskAddr = Unsafe.getLong(ringAddr + SQ_KRING_MASK_OFFSET); |
| 69 | this.sqKringMask = Unsafe.getInt(sqMaskAddr); |
| 70 | final long sqEntriesAddr = Unsafe.getLong(ringAddr + SQ_KRING_ENTRIES_OFFSET); |
| 71 | this.sqKringEntries = Unsafe.getInt(sqEntriesAddr); |
| 72 | |
| 73 | this.cqesAddr = Unsafe.getLong(ringAddr + CQ_CQES_OFFSET); |
| 74 | this.cqKheadAddr = Unsafe.getLong(ringAddr + CQ_KHEAD_OFFSET); |
| 75 | this.cqKtailAddr = Unsafe.getLong(ringAddr + CQ_KTAIL_OFFSET); |
| 76 | final long cqMaskAddr = Unsafe.getLong(ringAddr + CQ_KRING_MASK_OFFSET); |
| 77 | this.cqKringMask = Unsafe.getInt(cqMaskAddr); |
| 78 | final long cqEntriesAddr = Unsafe.getLong(ringAddr + CQ_KRING_ENTRIES_OFFSET); |
| 79 | int cqKringEntries = Unsafe.getInt(cqEntriesAddr); |
| 80 | cachedCqes = new long[2 * cqKringEntries]; |
| 81 | |
| 82 | this.ringFd = Files.createUniqueFd(ringFd); |
| 83 | } |
| 84 | |
| 85 | @Override |
| 86 | public void close() { |