提交 49a82c83 编写于 作者: S Skylot

fix: method info cache error (#868)

上级 26bad4a1
...@@ -26,20 +26,22 @@ public class InfoStorage { ...@@ -26,20 +26,22 @@ public class InfoStorage {
} }
} }
private int generateMethodLookupId(DexNode dex, int mthId) { private static int generateMethodLookupId(DexNode dex, int mthId) {
return dex.getDexId() << 16 | mthId; return dex.getDexId() << 16 | mthId;
} }
public MethodInfo getMethod(DexNode dex, int mtdId) { public MethodInfo getMethod(DexNode dex, int mtdId) {
return methods.get(generateMethodLookupId(dex, mtdId)); synchronized (methods) {
return methods.get(generateMethodLookupId(dex, mtdId));
}
} }
public MethodInfo putMethod(DexNode dex, int mthId, MethodInfo methodInfo) { public MethodInfo putMethod(DexNode dex, int mthId, MethodInfo methodInfo) {
synchronized (methods) { synchronized (methods) {
MethodInfo uniqueMethodInfo = putMethod(methodInfo); MethodInfo uniqueMethodInfo = putMethod(methodInfo);
MethodInfo prev = methods.put(generateMethodLookupId(dex, mthId), uniqueMethodInfo); MethodInfo prev = methods.put(generateMethodLookupId(dex, mthId), uniqueMethodInfo);
if (prev != null) { if (prev != null && prev != uniqueMethodInfo) {
throw new JadxRuntimeException("Method info already added: " + methodInfo); throw new JadxRuntimeException("Method lookup id collision: " + methodInfo + ", " + prev + ", " + uniqueMethodInfo);
} }
return uniqueMethodInfo; return uniqueMethodInfo;
} }
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册