fix: resolve multi-threaded unloading
This commit is contained in:
@@ -59,7 +59,7 @@ public final class JavaClass implements JavaNode {
|
||||
|
||||
public synchronized void refresh() {
|
||||
listsLoaded = false;
|
||||
cls.reloadCode();
|
||||
cls.reRunDecompile();
|
||||
}
|
||||
|
||||
public synchronized String getSmali() {
|
||||
|
||||
@@ -279,13 +279,21 @@ public class ClassNode extends LineAttrNode implements ILoadable, ICodeNode {
|
||||
return decompile(true);
|
||||
}
|
||||
|
||||
public synchronized ICodeInfo reRunDecompile() {
|
||||
return decompile(false);
|
||||
}
|
||||
|
||||
public synchronized ICodeInfo reloadCode() {
|
||||
unload();
|
||||
deepUnload();
|
||||
return decompile(false);
|
||||
}
|
||||
|
||||
private void deepUnload() {
|
||||
public void deepUnload() {
|
||||
if (cls == null) {
|
||||
// manually added class
|
||||
return;
|
||||
}
|
||||
clearAttributes();
|
||||
root().getConstValues().removeForClass(this);
|
||||
initialLoad();
|
||||
|
||||
@@ -222,6 +222,10 @@ public class RenameDialog extends JDialog {
|
||||
refreshTabs(mainWindow.getTabbedPane(), updatedClasses);
|
||||
|
||||
if (updatedClasses.size() > 0) {
|
||||
for (JavaClass updatedClass : updatedClasses) {
|
||||
updatedClass.unload();
|
||||
updatedClass.getClassNode().deepUnload();
|
||||
}
|
||||
setRefreshTask(updatedClasses);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user