mirror of
https://github.com/NationalSecurityAgency/ghidra.git
synced 2025-10-05 19:42:36 +02:00
GP-878: ObjectsProvider fixes. dbgeng termination/exit fixes.
This commit is contained in:
parent
75f950880e
commit
93b2f5cc64
16 changed files with 211 additions and 61 deletions
|
@ -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);
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue