diff options
| -rw-r--r-- | core/java/android/os/StrictMode.java | 23 |
1 files changed, 22 insertions, 1 deletions
diff --git a/core/java/android/os/StrictMode.java b/core/java/android/os/StrictMode.java index ab5173e9524b..25d868f0860f 100644 --- a/core/java/android/os/StrictMode.java +++ b/core/java/android/os/StrictMode.java @@ -600,6 +600,14 @@ public final class StrictMode { } } + // Sets up CloseGuard in Dalvik/libcore + private static void setCloseGuardEnabled(boolean enabled) { + if (!(CloseGuard.getReporter() instanceof AndroidBlockGuardPolicy)) { + CloseGuard.setReporter(new AndroidCloseGuardReporter()); + } + CloseGuard.setEnabled(enabled); + } + private static class StrictModeNetworkViolation extends BlockGuard.BlockGuardPolicyException { public StrictModeNetworkViolation(int policyMask) { super(policyMask, DETECT_NETWORK); @@ -1026,6 +1034,12 @@ public final class StrictMode { } } + private static class AndroidCloseGuardReporter implements CloseGuard.Reporter { + public void report (String message, Throwable allocationSite) { + onVmPolicyViolation(message, allocationSite); + } + } + /** * Called from Parcel.writeNoException() */ @@ -1051,7 +1065,7 @@ public final class StrictMode { */ public static void setVmPolicy(final VmPolicy policy) { sVmPolicyMask = policy.mask; - CloseGuard.setEnabled(vmClosableObjectLeaksEnabled()); + setCloseGuardEnabled(vmClosableObjectLeaksEnabled()); } /** @@ -1099,6 +1113,13 @@ public final class StrictMode { * @hide */ public static void onSqliteObjectLeaked(String message, Throwable originStack) { + onVmPolicyViolation(message, originStack); + } + + /** + * @hide + */ + public static void onVmPolicyViolation(String message, Throwable originStack) { if ((sVmPolicyMask & PENALTY_LOG) != 0) { Log.e(TAG, message, originStack); } |