Skip to content

Commit 393218f

Browse files
committed
Linux: use array element var handle
1 parent 62d3553 commit 393218f

File tree

2 files changed

+8
-3
lines changed

2 files changed

+8
-3
lines changed

java-does-usb/src/main/java/net/codecrete/usb/linux/EPoll.java

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -50,8 +50,14 @@ private EPoll() {}
5050
JAVA_INT_UNALIGNED.withName("events"),
5151
DATA$LAYOUT.withName("data")).withName("epoll_event");
5252

53+
// varhandle to access the "fd" field in an epoll_event array
54+
static final VarHandle EVENT_ARRAY_DATA_FD$VH = EVENT$LAYOUT.arrayElementVarHandle(
55+
MemoryLayout.PathElement.groupElement("data"),
56+
MemoryLayout.PathElement.groupElement("fd")
57+
);
58+
5359
// varhandle to access the "fd" field in an epoll_event struct
54-
static final VarHandle EVENT_DATA_FD$VH = EVENT$LAYOUT.varHandle(
60+
private static final VarHandle EVENT_DATA_FD$VH = EVENT$LAYOUT.varHandle(
5561
MemoryLayout.PathElement.groupElement("data"),
5662
MemoryLayout.PathElement.groupElement("fd")
5763
);

java-does-usb/src/main/java/net/codecrete/usb/linux/LinuxAsyncTask.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -98,8 +98,7 @@ private void asyncCompletionTask() {
9898

9999
// for all ready file descriptors, reap URBs
100100
for (int i = 0; i < res; i++) {
101-
var event = events.asSlice(i * EPoll.EVENT$LAYOUT.byteSize(), EPoll.EVENT$LAYOUT);
102-
var fd = (int) EPoll.EVENT_DATA_FD$VH.get(event, 0L);
101+
var fd = (int) EPoll.EVENT_ARRAY_DATA_FD$VH.get(events, 0L, i);
103102
reapURBs(fd, urbPointerHolder, errorState);
104103
}
105104
}

0 commit comments

Comments
 (0)