summaryrefslogtreecommitdiffstats
path: root/apps/Term
diff options
context:
space:
mode:
authorJack Palevich <>2009-04-02 10:04:28 -0700
committerThe Android Open Source Project <initial-contribution@android.com>2009-04-02 10:04:28 -0700
commit74285ab54887f45fe011fd1828277605ce614490 (patch)
tree3c9944cc1d8c3e1cf6758b44d6ea1544869eee4d /apps/Term
parent57392cb174639582377ab80c100dc09cd69199ec (diff)
downloadandroid_development-74285ab54887f45fe011fd1828277605ce614490.tar.gz
android_development-74285ab54887f45fe011fd1828277605ce614490.tar.bz2
android_development-74285ab54887f45fe011fd1828277605ce614490.zip
AI 144124: Avoid leaking a pty file descriptor when quitting the terminal.
BUG=1750582 Automated import of CL 144124
Diffstat (limited to 'apps/Term')
-rw-r--r--apps/Term/jni/termExec.cpp19
-rw-r--r--apps/Term/src/com/android/term/Exec.java5
-rw-r--r--apps/Term/src/com/android/term/Term.java9
3 files changed, 32 insertions, 1 deletions
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];