mirror of
https://github.com/eclipse-cdt/cdt
synced 2025-04-23 14:42:11 +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
|
||||
public void dispose() {
|
||||
if (fEventListenerRegisterd) {
|
||||
fSession.removeServiceEventListener(this);
|
||||
try {
|
||||
fSession.getExecutor().execute(new DsfRunnable() {
|
||||
public void run() {
|
||||
if (fEventListenerRegisterd) {
|
||||
fSession.removeServiceEventListener(this);
|
||||
}
|
||||
}
|
||||
});
|
||||
} catch (RejectedExecutionException e) {
|
||||
// Session already gone.
|
||||
}
|
||||
|
||||
fServicesTracker.dispose();
|
||||
fDisposed = true;
|
||||
}
|
||||
|
|
|
@ -16,6 +16,7 @@ import java.util.HashMap;
|
|||
import java.util.LinkedList;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.concurrent.RejectedExecutionException;
|
||||
import java.util.concurrent.ScheduledFuture;
|
||||
import java.util.concurrent.TimeUnit;
|
||||
|
||||
|
@ -164,9 +165,17 @@ public final class SteppingController
|
|||
}
|
||||
|
||||
public void dispose() {
|
||||
if (fRunControl != null) {
|
||||
getSession().removeServiceEventListener(this);
|
||||
}
|
||||
try {
|
||||
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();
|
||||
store.removePropertyChangeListener(fPreferencesListener);
|
||||
|
|
|
@ -305,6 +305,8 @@ public class DsfSession
|
|||
* listener will receive events from
|
||||
*/
|
||||
public void addServiceEventListener(Object listener, Filter filter) {
|
||||
assert getExecutor().isInExecutorThread();
|
||||
|
||||
ListenerEntry entry = new ListenerEntry(listener, filter);
|
||||
assert !fListeners.containsKey(entry);
|
||||
if (DEBUG_SESSION_LISTENERS) {
|
||||
|
@ -325,6 +327,8 @@ public class DsfSession
|
|||
* @param listener listener to remove
|
||||
*/
|
||||
public void removeServiceEventListener(Object listener) {
|
||||
assert getExecutor().isInExecutorThread();
|
||||
|
||||
ListenerEntry entry = new ListenerEntry(listener, null);
|
||||
assert fListeners.containsKey(entry);
|
||||
if (DEBUG_SESSION_LISTENERS) {
|
||||
|
|
Loading…
Add table
Reference in a new issue