1
0
Fork 0
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:
Pawel Piech 2010-01-06 00:38:05 +00:00
parent e31d06b003
commit c13753ddb3
3 changed files with 27 additions and 5 deletions

View file

@ -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;
}

View file

@ -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);

View file

@ -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) {