summaryrefslogtreecommitdiff
path: root/core/java/android/app/ActivityThread.java
diff options
context:
space:
mode:
Diffstat (limited to 'core/java/android/app/ActivityThread.java')
-rw-r--r--core/java/android/app/ActivityThread.java16
1 files changed, 13 insertions, 3 deletions
diff --git a/core/java/android/app/ActivityThread.java b/core/java/android/app/ActivityThread.java
index 7198146bee0f..b220b2e23732 100644
--- a/core/java/android/app/ActivityThread.java
+++ b/core/java/android/app/ActivityThread.java
@@ -1166,12 +1166,22 @@ public final class ActivityThread {
@Override
public void dumpDbInfo(final FileDescriptor fd, final String[] args) {
if (mSystemThread) {
- // Ensure this invocation is asynchronous to prevent
- // writer waiting due to buffer cannot be consumed.
+ // Ensure this invocation is asynchronous to prevent writer waiting if buffer cannot
+ // be consumed. But it must duplicate the file descriptor first, since caller might
+ // be closing it.
+ final ParcelFileDescriptor dup;
+ try {
+ dup = ParcelFileDescriptor.dup(fd);
+ } catch (IOException e) {
+ Log.w(TAG, "Could not dup FD " + fd.getInt$());
+ return;
+ }
+
AsyncTask.THREAD_POOL_EXECUTOR.execute(new Runnable() {
@Override
public void run() {
- dumpDatabaseInfo(fd, args);
+ dumpDatabaseInfo(dup.getFileDescriptor(), args);
+ IoUtils.closeQuietly(dup);
}
});
} else {