diff --git a/app/src/main/java/org/autojs/autojs/model/script/Scripts.kt b/app/src/main/java/org/autojs/autojs/model/script/Scripts.kt index f15e7831..5a03e150 100644 --- a/app/src/main/java/org/autojs/autojs/model/script/Scripts.kt +++ b/app/src/main/java/org/autojs/autojs/model/script/Scripts.kt @@ -137,8 +137,8 @@ object Scripts { } @Nullable - fun getRhinoException(e: Throwable?): RhinoException? { - var e = e + fun getRhinoException(throwable: Throwable?): RhinoException? { + var e = throwable while (e != null) { if (e is RhinoException) { return e diff --git a/autojs/src/main/java/com/stardust/autojs/engine/ScriptEngine.java b/autojs/src/main/java/com/stardust/autojs/engine/ScriptEngine.java index bb6c9a68..46312834 100644 --- a/autojs/src/main/java/com/stardust/autojs/engine/ScriptEngine.java +++ b/autojs/src/main/java/com/stardust/autojs/engine/ScriptEngine.java @@ -7,6 +7,7 @@ import com.stardust.autojs.script.ScriptSource; import java.util.HashMap; import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.atomic.AtomicInteger; /** @@ -68,14 +69,14 @@ public interface ScriptEngine { abstract class AbstractScriptEngine implements ScriptEngine { - private Map mTags = new HashMap<>(); + private Map mTags = new ConcurrentHashMap<>(); private OnDestroyListener mOnDestroyListener; - private boolean mDestroyed = false; + private volatile boolean mDestroyed = false; private Throwable mUncaughtException; private volatile AtomicInteger mId = new AtomicInteger(ScriptExecution.NO_ID); @Override - public synchronized void setTag(String key, Object value) { + public void setTag(String key, Object value) { if (value == null) { mTags.remove(key); } else { @@ -84,22 +85,22 @@ public interface ScriptEngine { } @Override - public synchronized Object getTag(String key) { + public Object getTag(String key) { return mTags.get(key); } @Override - public synchronized boolean isDestroyed() { + public boolean isDestroyed() { return mDestroyed; } @CallSuper @Override - public synchronized void destroy() { - mDestroyed = true; + public void destroy() { if (mOnDestroyListener != null) { mOnDestroyListener.onDestroy(this); } + mDestroyed = true; } public String cwd() {