Skip to content

Commit 271e4f1

Browse files
committed
[GR-69051] When removing an event request, remove the request filter also.
PullRequest: graal/22009
2 parents f339523 + 6fc0def commit 271e4f1

File tree

2 files changed

+35
-6
lines changed

2 files changed

+35
-6
lines changed

espresso/src/com.oracle.truffle.espresso.jdwp/src/com/oracle/truffle/espresso/jdwp/impl/EventFilters.java

Lines changed: 34 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright (c) 2019, 2019, Oracle and/or its affiliates. All rights reserved.
2+
* Copyright (c) 2019, 2025, Oracle and/or its affiliates. All rights reserved.
33
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
44
*
55
* This code is free software; you can redistribute it and/or modify it
@@ -33,23 +33,24 @@ public final class EventFilters {
3333
private RequestFilter[] requestFilters = new RequestFilter[0];
3434

3535
public void addFilter(RequestFilter filter) {
36+
Lock writeLock = lock.writeLock();
37+
writeLock.lock();
3638
try {
37-
lock.writeLock().lock();
3839
RequestFilter[] temp = new RequestFilter[requestFilters.length + 1];
3940
System.arraycopy(requestFilters, 0, temp, 0, requestFilters.length);
4041
temp[requestFilters.length] = filter;
4142
requestFilters = temp;
4243
} finally {
43-
lock.writeLock().unlock();
44+
writeLock.unlock();
4445
}
4546
}
4647

4748
public RequestFilter getRequestFilter(int requestId) {
4849
Lock readLock = lock.readLock();
50+
readLock.lock();
4951
try {
50-
readLock.lock();
5152
// likely the filters are required from last inserted
52-
for (int i = requestFilters.length - 1; i > -1; i--) {
53+
for (int i = requestFilters.length - 1; i >= 0; i--) {
5354
RequestFilter filter = requestFilters[i];
5455
if (filter != null) {
5556
if (filter.getRequestId() == requestId) {
@@ -63,6 +64,34 @@ public RequestFilter getRequestFilter(int requestId) {
6364
}
6465
}
6566

67+
public RequestFilter removeRequestFilter(int requestId) {
68+
Lock writeLock = lock.writeLock();
69+
writeLock.lock();
70+
try {
71+
// likely the filters are required from last inserted
72+
for (int i = requestFilters.length - 1; i >= 0; i--) {
73+
RequestFilter filter = requestFilters[i];
74+
if (filter != null) {
75+
if (filter.getRequestId() == requestId) {
76+
RequestFilter[] temp = new RequestFilter[requestFilters.length - 1];
77+
// Copy with `i` index removed.
78+
if (i > 0) {
79+
System.arraycopy(requestFilters, 0, temp, 0, i);
80+
}
81+
if (i < requestFilters.length - 1) {
82+
System.arraycopy(requestFilters, i + 1, temp, i, requestFilters.length - i - 1);
83+
}
84+
requestFilters = temp;
85+
return filter;
86+
}
87+
}
88+
}
89+
return null;
90+
} finally {
91+
writeLock.unlock();
92+
}
93+
}
94+
6695
public void clearAll() {
6796
try {
6897
lock.writeLock().lock();

espresso/src/com.oracle.truffle.espresso.jdwp/src/com/oracle/truffle/espresso/jdwp/impl/RequestedJDWPEvents.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -298,7 +298,7 @@ public CommandResult clearRequest(Packet packet) {
298298

299299
byte eventKind = input.readByte();
300300
int requestId = input.readInt();
301-
RequestFilter requestFilter = controller.getEventFilters().getRequestFilter(requestId);
301+
RequestFilter requestFilter = controller.getEventFilters().removeRequestFilter(requestId);
302302

303303
if (requestFilter != null) {
304304
byte kind = requestFilter.getEventKind();

0 commit comments

Comments
 (0)