GP-878: ObjectsProvider fixes. dbgeng termination/exit fixes.

This commit is contained in:
d-millar 2021-04-22 20:12:10 +00:00 committed by Dan
parent 75f950880e
commit 93b2f5cc64
16 changed files with 211 additions and 61 deletions

View file

@ -16,6 +16,7 @@
package agent.dbgmodel.model.impl;
import java.util.*;
import java.util.Map.Entry;
import java.util.concurrent.CompletableFuture;
import java.util.stream.Collectors;
@ -112,9 +113,11 @@ public class DbgModel2TargetObjectImpl extends DefaultTargetObject<TargetObject,
@Override
public CompletableFuture<Void> requestElements(boolean refresh) {
List<TargetObject> nlist = new ArrayList<>();
List<String> rlist = new ArrayList<>();
return requestNativeElements().thenCompose(list -> {
synchronized (elements) {
for (TargetObject element : elements.values()) {
for (Entry<String, TargetObject> entry : elements.entrySet()) {
TargetObject element = entry.getValue();
if (!list.contains(element)) {
if (element instanceof DbgStateListener) {
getManager().removeStateListener((DbgStateListener) element);
@ -122,6 +125,7 @@ public class DbgModel2TargetObjectImpl extends DefaultTargetObject<TargetObject,
if (element instanceof DbgEventsListener) {
getManager().removeEventsListener((DbgEventsListener) element);
}
rlist.add(entry.getKey());
}
}
nlist.addAll(list);
@ -129,18 +133,20 @@ public class DbgModel2TargetObjectImpl extends DefaultTargetObject<TargetObject,
//return processModelObjectElements(nlist);
}
}).thenAccept(__ -> {
changeElements(List.of(), nlist, Map.of(), "Refreshed");
changeElements(rlist, nlist, Map.of(), "Refreshed");
});
}
@Override
public CompletableFuture<Void> requestAttributes(boolean refresh) {
Map<String, Object> nmap = new HashMap<>();
List<String> rlist = new ArrayList<>();
return requestNativeAttributes().thenCompose(map -> {
synchronized (attributes) {
if (map != null) {
Collection<?> values = map.values();
for (Object attribute : attributes.values()) {
for (Entry<String, Object> entry : attributes.entrySet()) {
Object attribute = entry.getValue();
if (!values.contains(attribute)) {
if (attribute instanceof DbgStateListener) {
getManager().removeStateListener((DbgStateListener) attribute);
@ -148,6 +154,7 @@ public class DbgModel2TargetObjectImpl extends DefaultTargetObject<TargetObject,
if (attribute instanceof DbgEventsListener) {
getManager().removeEventsListener((DbgEventsListener) attribute);
}
rlist.add(entry.getKey());
}
}
nmap.putAll(map);

View file

@ -332,10 +332,10 @@ public class DbgModel2TargetRootImpl extends DbgModel2DefaultTargetModelRoot
return;
}
DbgModelTargetProcess process = (DbgModelTargetProcess) object.getProxy();
process.setExecutionState(TargetExecutionState.INACTIVE, "Detached");
DbgProcess proc = process.getProcess();
getListeners().fire.event(getProxy(), null, TargetEventType.PROCESS_EXITED,
"Process " + proc.getId() + " exited code=" + proc.getExitCode(), List.of(process));
if (!process.getExecutionState().equals(TargetExecutionState.TERMINATED)) {
process.setExecutionState(TargetExecutionState.INACTIVE, "Detached");
}
process.getParent().resync();
});
}
@ -540,8 +540,7 @@ public class DbgModel2TargetRootImpl extends DbgModel2DefaultTargetModelRoot
}
return TargetEventType.STOPPED;
case SESSION_EXIT:
getModel().close();
break;
return TargetEventType.PROCESS_EXITED;
default:
break;
}