From 249ad57a887680538d1dc0195e746b1d877ebd6a Mon Sep 17 00:00:00 2001 From: Mike Lockwood Date: Wed, 20 May 2009 09:14:30 -0400 Subject: [PATCH 1/2] adb: adbd no longer disables OOM and now sets children's OOM adjustment to zero Signed-off-by: Mike Lockwood --- adb/adb.c | 13 ------------- adb/services.c | 12 ++++++++++++ 2 files changed, 12 insertions(+), 13 deletions(-) diff --git a/adb/adb.c b/adb/adb.c index 12a36f5c2..7a2b2993e 100644 --- a/adb/adb.c +++ b/adb/adb.c @@ -818,19 +818,6 @@ int adb_main(int is_daemon) #if !ADB_HOST int secure = 0; char value[PROPERTY_VALUE_MAX]; - - // prevent the OOM killer from killing us - char text[64]; - snprintf(text, sizeof text, "/proc/%d/oom_adj", (int)getpid()); - int fd = adb_open(text, O_WRONLY); - if (fd >= 0) { - // -17 should make us immune to OOM - snprintf(text, sizeof text, "%d", -17); - adb_write(fd, text, strlen(text)); - adb_close(fd); - } else { - D("adb: unable to open %s\n", text); - } #endif atexit(adb_cleanup); diff --git a/adb/services.c b/adb/services.c index 1de55e6cd..0a5edcf4b 100644 --- a/adb/services.c +++ b/adb/services.c @@ -244,6 +244,18 @@ static int create_subprocess(const char *cmd, const char *arg0, const char *arg1 cmd, strerror(errno), errno); exit(-1); } else { +#if !ADB_HOST + // set child's OOM adjustment to zero + char text[64]; + snprintf(text, sizeof text, "/proc/%d/oom_adj", pid); + int fd = adb_open(text, O_WRONLY); + if (fd >= 0) { + adb_write(fd, "0", 1); + adb_close(fd); + } else { + D("adb: unable to open %s\n", text); + } +#endif return ptm; } #endif /* !HAVE_WIN32_PROC */ From 8f13782e7b4a705484d7f97f07513781b82be0dc Mon Sep 17 00:00:00 2001 From: Mathias Agopian Date: Wed, 20 May 2009 14:16:34 -0700 Subject: [PATCH 2/2] move native_handle stuff from master_gl --- include/cutils/native_handle.h | 47 ++++++++++++++++++++++++-- libcutils/Android.mk | 1 + libcutils/native_handle.c | 60 ++++++++++++++++++++++++++++++++++ 3 files changed, 106 insertions(+), 2 deletions(-) create mode 100644 libcutils/native_handle.c diff --git a/include/cutils/native_handle.h b/include/cutils/native_handle.h index 2b648935c..8a44b7299 100644 --- a/include/cutils/native_handle.h +++ b/include/cutils/native_handle.h @@ -17,12 +17,55 @@ #ifndef NATIVE_HANDLE_H_ #define NATIVE_HANDLE_H_ +#include + +__BEGIN_DECLS + typedef struct { - int version; /* sizeof(native_handle) */ + int version; /* sizeof(native_handle_t) */ int numFds; /* number of file-descriptors at &data[0] */ int numInts; /* number of ints at &data[numFds] */ int data[0]; /* numFds + numInts ints */ -} native_handle; +} native_handle_t; + + +/* keep the old definition for backward source-compatibility */ +typedef native_handle_t native_handle; + +/* + * native_handle_close + * + * closes the file descriptors contained in this native_handle_t + * + * return 0 on success, or a negative error code on failure + * + */ +int native_handle_close(const native_handle_t* h); + + +/* + * native_handle_create + * + * creates a native_handle_t and initializes it. must be destroyed with + * native_handle_delete(). + * + */ +native_handle_t* native_handle_create(int numFds, int numInts); + +/* + * native_handle_delete + * + * frees a native_handle_t allocated with native_handle_create(). + * This ONLY frees the memory allocated for the native_handle_t, but doesn't + * close the file descriptors; which can be achieved with native_handle_close(). + * + * return 0 on success, or a negative error code on failure + * + */ +int native_handle_delete(native_handle_t* h); + + +__END_DECLS #endif /* NATIVE_HANDLE_H_ */ diff --git a/libcutils/Android.mk b/libcutils/Android.mk index f5e49f5f5..18d0ee318 100644 --- a/libcutils/Android.mk +++ b/libcutils/Android.mk @@ -20,6 +20,7 @@ commonSources := \ array.c \ hashmap.c \ atomic.c \ + native_handle.c \ buffer.c \ socket_inaddr_any_server.c \ socket_local_client.c \ diff --git a/libcutils/native_handle.c b/libcutils/native_handle.c new file mode 100644 index 000000000..40899685e --- /dev/null +++ b/libcutils/native_handle.c @@ -0,0 +1,60 @@ +/* + * Copyright (C) 2007 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#define LOG_TAG "NativeHandle" + +#include +#include +#include +#include +#include + +#include +#include + +native_handle_t* native_handle_create(int numFds, int numInts) +{ + native_handle_t* h = malloc( + sizeof(native_handle_t) + sizeof(int)*(numFds+numInts)); + + h->version = sizeof(native_handle_t); + h->numFds = numFds; + h->numInts = numInts; + return h; +} + +int native_handle_delete(native_handle_t* h) +{ + if (h) { + if (h->version != sizeof(native_handle_t)) + return -EINVAL; + free(h); + } + return 0; +} + +int native_handle_close(const native_handle_t* h) +{ + if (h->version != sizeof(native_handle_t)) + return -EINVAL; + + const int numFds = h->numFds; + int i; + for (i=0 ; idata[i]); + } + return 0; +}