From 74285ab54887f45fe011fd1828277605ce614490 Mon Sep 17 00:00:00 2001 From: Jack Palevich <> Date: Thu, 2 Apr 2009 10:04:28 -0700 Subject: [PATCH] AI 144124: Avoid leaking a pty file descriptor when quitting the terminal. BUG=1750582 Automated import of CL 144124 --- apps/Term/jni/termExec.cpp | 19 ++++++++++++++++++- apps/Term/src/com/android/term/Exec.java | 5 +++++ apps/Term/src/com/android/term/Term.java | 9 +++++++++ 3 files changed, 32 insertions(+), 1 deletion(-) diff --git a/apps/Term/jni/termExec.cpp b/apps/Term/jni/termExec.cpp index 968bb90e9..d0666cc91 100644 --- a/apps/Term/jni/termExec.cpp +++ b/apps/Term/jni/termExec.cpp @@ -215,6 +215,21 @@ static int android_os_Exec_waitFor(JNIEnv *env, jobject clazz, return result; } +static void android_os_Exec_close(JNIEnv *env, jobject clazz, jobject fileDescriptor) +{ + int fd; + struct winsize sz; + + fd = env->GetIntField(fileDescriptor, field_fileDescriptor_descriptor); + + if (env->ExceptionOccurred() != NULL) { + return; + } + + close(fd); +} + + static int register_FileDescriptor(JNIEnv *env) { class_fileDescriptor = env->FindClass("java/io/FileDescriptor"); @@ -248,7 +263,9 @@ static JNINativeMethod method_table[] = { { "setPtyWindowSize", "(Ljava/io/FileDescriptor;IIII)V", (void*) android_os_Exec_setPtyWindowSize}, { "waitFor", "(I)I", - (void*) android_os_Exec_waitFor} + (void*) android_os_Exec_waitFor}, + { "close", "(Ljava/io/FileDescriptor;)V", + (void*) android_os_Exec_close} }; /* diff --git a/apps/Term/src/com/android/term/Exec.java b/apps/Term/src/com/android/term/Exec.java index f84e7c127..6a9ccac4c 100644 --- a/apps/Term/src/com/android/term/Exec.java +++ b/apps/Term/src/com/android/term/Exec.java @@ -63,5 +63,10 @@ public class Exec * */ public static native int waitFor(int processId); + + /** + * Close a given file descriptor. + */ + public static native void close(FileDescriptor fd); } diff --git a/apps/Term/src/com/android/term/Term.java b/apps/Term/src/com/android/term/Term.java index ae83a8988..82aa0d38b 100644 --- a/apps/Term/src/com/android/term/Term.java +++ b/apps/Term/src/com/android/term/Term.java @@ -184,6 +184,15 @@ public class Term extends Activity { updatePrefs(); } + @Override + public void onDestroy() { + super.onDestroy(); + if (mTermFd != null) { + Exec.close(mTermFd); + mTermFd = null; + } + } + private void startListening() { int[] processId = new int[1];