mirror of
https://github.com/eclipse-cdt/cdt
synced 2025-06-08 02:06:01 +02:00
[298135]- Several calls to DsfSession add/removeServiceEventListener not on executor thread
This commit is contained in:
parent
e31d06b003
commit
c13753ddb3
3 changed files with 27 additions and 5 deletions
|
@ -100,9 +100,18 @@ public class DsfSuspendTrigger implements ISuspendTrigger {
|
||||||
|
|
||||||
@ThreadSafe
|
@ThreadSafe
|
||||||
public void dispose() {
|
public void dispose() {
|
||||||
if (fEventListenerRegisterd) {
|
try {
|
||||||
fSession.removeServiceEventListener(this);
|
fSession.getExecutor().execute(new DsfRunnable() {
|
||||||
|
public void run() {
|
||||||
|
if (fEventListenerRegisterd) {
|
||||||
|
fSession.removeServiceEventListener(this);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
} catch (RejectedExecutionException e) {
|
||||||
|
// Session already gone.
|
||||||
}
|
}
|
||||||
|
|
||||||
fServicesTracker.dispose();
|
fServicesTracker.dispose();
|
||||||
fDisposed = true;
|
fDisposed = true;
|
||||||
}
|
}
|
||||||
|
|
|
@ -16,6 +16,7 @@ import java.util.HashMap;
|
||||||
import java.util.LinkedList;
|
import java.util.LinkedList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
import java.util.concurrent.RejectedExecutionException;
|
||||||
import java.util.concurrent.ScheduledFuture;
|
import java.util.concurrent.ScheduledFuture;
|
||||||
import java.util.concurrent.TimeUnit;
|
import java.util.concurrent.TimeUnit;
|
||||||
|
|
||||||
|
@ -164,9 +165,17 @@ public final class SteppingController
|
||||||
}
|
}
|
||||||
|
|
||||||
public void dispose() {
|
public void dispose() {
|
||||||
if (fRunControl != null) {
|
try {
|
||||||
getSession().removeServiceEventListener(this);
|
fSession.getExecutor().execute(new DsfRunnable() {
|
||||||
}
|
public void run() {
|
||||||
|
if (fRunControl != null) {
|
||||||
|
getSession().removeServiceEventListener(this);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
} catch (RejectedExecutionException e) {
|
||||||
|
// Session already gone.
|
||||||
|
}
|
||||||
|
|
||||||
IPreferenceStore store= DsfUIPlugin.getDefault().getPreferenceStore();
|
IPreferenceStore store= DsfUIPlugin.getDefault().getPreferenceStore();
|
||||||
store.removePropertyChangeListener(fPreferencesListener);
|
store.removePropertyChangeListener(fPreferencesListener);
|
||||||
|
|
|
@ -305,6 +305,8 @@ public class DsfSession
|
||||||
* listener will receive events from
|
* listener will receive events from
|
||||||
*/
|
*/
|
||||||
public void addServiceEventListener(Object listener, Filter filter) {
|
public void addServiceEventListener(Object listener, Filter filter) {
|
||||||
|
assert getExecutor().isInExecutorThread();
|
||||||
|
|
||||||
ListenerEntry entry = new ListenerEntry(listener, filter);
|
ListenerEntry entry = new ListenerEntry(listener, filter);
|
||||||
assert !fListeners.containsKey(entry);
|
assert !fListeners.containsKey(entry);
|
||||||
if (DEBUG_SESSION_LISTENERS) {
|
if (DEBUG_SESSION_LISTENERS) {
|
||||||
|
@ -325,6 +327,8 @@ public class DsfSession
|
||||||
* @param listener listener to remove
|
* @param listener listener to remove
|
||||||
*/
|
*/
|
||||||
public void removeServiceEventListener(Object listener) {
|
public void removeServiceEventListener(Object listener) {
|
||||||
|
assert getExecutor().isInExecutorThread();
|
||||||
|
|
||||||
ListenerEntry entry = new ListenerEntry(listener, null);
|
ListenerEntry entry = new ListenerEntry(listener, null);
|
||||||
assert fListeners.containsKey(entry);
|
assert fListeners.containsKey(entry);
|
||||||
if (DEBUG_SESSION_LISTENERS) {
|
if (DEBUG_SESSION_LISTENERS) {
|
||||||
|
|
Loading…
Add table
Reference in a new issue