Merge change 2162 into donut
* changes:
Mount SD card synchronous. This is an experimental change intended to give us another data point on the system performance regressions that seem to revolved around SD card access.
diff --git a/adb/adb.c b/adb/adb.c
index 12a36f5..7a2b299 100644
--- a/adb/adb.c
+++ b/adb/adb.c
@@ -818,19 +818,6 @@
#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 1de55e6..0a5edcf 100644
--- a/adb/services.c
+++ b/adb/services.c
@@ -244,6 +244,18 @@
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 */
diff --git a/include/cutils/native_handle.h b/include/cutils/native_handle.h
index 2b64893..8a44b72 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 <sys/cdefs.h>
+
+__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/include/sysutils/FrameworkClient.h b/include/sysutils/FrameworkClient.h
index 1eb112a..0ef0753 100644
--- a/include/sysutils/FrameworkClient.h
+++ b/include/sysutils/FrameworkClient.h
@@ -13,8 +13,8 @@
FrameworkClient(int sock);
virtual ~FrameworkClient() {}
- int sendMsg(char *msg);
- int sendMsg(char *msg, char *data);
+ int sendMsg(const char *msg);
+ int sendMsg(const char *msg, const char *data);
};
typedef android::List<FrameworkClient *> FrameworkClientCollection;
diff --git a/include/sysutils/SocketClient.h b/include/sysutils/SocketClient.h
index cde64a5..469dd9d 100644
--- a/include/sysutils/SocketClient.h
+++ b/include/sysutils/SocketClient.h
@@ -15,8 +15,8 @@
int getSocket() { return mSocket; }
- int sendMsg(int code, char *msg, bool addErrno);
- int sendMsg(char *msg);
+ int sendMsg(int code, const char *msg, bool addErrno);
+ int sendMsg(const char *msg);
};
typedef android::List<SocketClient *> SocketClientCollection;
diff --git a/include/sysutils/SocketListener.h b/include/sysutils/SocketListener.h
index 30d050d..68dcb8f 100644
--- a/include/sysutils/SocketListener.h
+++ b/include/sysutils/SocketListener.h
@@ -37,8 +37,8 @@
int startListener();
int stopListener();
- void sendBroadcast(int code, char *msg, bool addErrno);
- void sendBroadcast(char *msg);
+ void sendBroadcast(int code, const char *msg, bool addErrno);
+ void sendBroadcast(const char *msg);
protected:
virtual bool onDataAvailable(SocketClient *c) = 0;
diff --git a/libcutils/Android.mk b/libcutils/Android.mk
index f5e49f5..18d0ee3 100644
--- a/libcutils/Android.mk
+++ b/libcutils/Android.mk
@@ -20,6 +20,7 @@
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 0000000..4089968
--- /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 <stdint.h>
+#include <errno.h>
+#include <string.h>
+#include <stdlib.h>
+#include <unistd.h>
+
+#include <cutils/log.h>
+#include <cutils/native_handle.h>
+
+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 ; i<numFds ; i++) {
+ close(h->data[i]);
+ }
+ return 0;
+}
diff --git a/libsysutils/src/FrameworkClient.cpp b/libsysutils/src/FrameworkClient.cpp
index 237bb60..1686996 100644
--- a/libsysutils/src/FrameworkClient.cpp
+++ b/libsysutils/src/FrameworkClient.cpp
@@ -13,8 +13,7 @@
pthread_mutex_init(&mWriteMutex, NULL);
}
-int FrameworkClient::sendMsg(char *msg) {
- LOGD("FrameworkClient::sendMsg(%s)", msg);
+int FrameworkClient::sendMsg(const char *msg) {
if (mSocket < 0) {
errno = EHOSTUNREACH;
return -1;
@@ -28,7 +27,7 @@
return 0;
}
-int FrameworkClient::sendMsg(char *msg, char *data) {
+int FrameworkClient::sendMsg(const char *msg, const char *data) {
char *buffer = (char *) alloca(strlen(msg) + strlen(data) + 1);
if (!buffer) {
errno = -ENOMEM;
diff --git a/libsysutils/src/SocketClient.cpp b/libsysutils/src/SocketClient.cpp
index ab020ca..b229627 100644
--- a/libsysutils/src/SocketClient.cpp
+++ b/libsysutils/src/SocketClient.cpp
@@ -14,7 +14,7 @@
pthread_mutex_init(&mWriteMutex, NULL);
}
-int SocketClient::sendMsg(int code, char *msg, bool addErrno) {
+int SocketClient::sendMsg(int code, const char *msg, bool addErrno) {
char *buf;
if (addErrno) {
@@ -27,23 +27,24 @@
return sendMsg(buf);
}
-int SocketClient::sendMsg(char *msg) {
+int SocketClient::sendMsg(const char *msg) {
if (mSocket < 0) {
errno = EHOSTUNREACH;
return -1;
}
- char *bp;
-
+ char *tmp;
+ const char *bp = msg;
+
if (msg[strlen(msg)] != '\n') {
- bp = (char *) alloca(strlen(msg) + 1);
- strcpy(bp, msg);
- strcat(bp, "\n");
- } else
- bp = msg;
+ tmp = (char *) alloca(strlen(msg) + 1);
+ strcpy(tmp, msg);
+ strcat(tmp, "\n");
+ bp = tmp;
+ }
int rc = 0;
- char *p = bp;
+ const char *p = bp;
int brtw = strlen(bp);
pthread_mutex_lock(&mWriteMutex);
diff --git a/libsysutils/src/SocketListener.cpp b/libsysutils/src/SocketListener.cpp
index acc4a67..cb7dd80 100644
--- a/libsysutils/src/SocketListener.cpp
+++ b/libsysutils/src/SocketListener.cpp
@@ -173,7 +173,7 @@
}
}
-void SocketListener::sendBroadcast(int code, char *msg, bool addErrno) {
+void SocketListener::sendBroadcast(int code, const char *msg, bool addErrno) {
pthread_mutex_lock(&mClientsLock);
SocketClientCollection::iterator i;
@@ -185,7 +185,7 @@
pthread_mutex_unlock(&mClientsLock);
}
-void SocketListener::sendBroadcast(char *msg) {
+void SocketListener::sendBroadcast(const char *msg) {
pthread_mutex_lock(&mClientsLock);
SocketClientCollection::iterator i;
diff --git a/nexus/OpenVpnController.cpp b/nexus/OpenVpnController.cpp
index d326ad5..411a0c7 100644
--- a/nexus/OpenVpnController.cpp
+++ b/nexus/OpenVpnController.cpp
@@ -26,6 +26,7 @@
#include "OpenVpnController.h"
#define DAEMON_PROP_NAME "vpn.openvpn.status"
+
#define DAEMON_CONFIG_FILE "/data/misc/openvpn/openvpn.conf"
OpenVpnController::OpenVpnController() :
@@ -46,13 +47,16 @@
}
int OpenVpnController::enable() {
-
- if (validateConfig()) {
- LOGE("Error validating configuration file");
+ char svc[PROPERTY_VALUE_MAX];
+ char tmp[64];
+
+ if (!getProperty("vpn.gateway", tmp, sizeof(tmp))) {
+ LOGE("Error reading property 'vpn.gateway' (%s)", strerror(errno));
return -1;
}
+ snprintf(svc, sizeof(svc), "openvpn:--remote %s 1194", tmp);
- if (mServiceManager->start("openvpn"))
+ if (mServiceManager->start(svc))
return -1;
return 0;
@@ -64,15 +68,3 @@
return -1;
return 0;
}
-
-int OpenVpnController::validateConfig() {
- unlink(DAEMON_CONFIG_FILE);
-
- FILE *fp = fopen(DAEMON_CONFIG_FILE, "w");
- if (!fp)
- return -1;
-
- fprintf(fp, "remote %s 1194\n", inet_ntoa(getVpnGateway()));
- fclose(fp);
- return 0;
-}
diff --git a/nexus/OpenVpnController.h b/nexus/OpenVpnController.h
index 7bcc098..b321029 100644
--- a/nexus/OpenVpnController.h
+++ b/nexus/OpenVpnController.h
@@ -33,11 +33,6 @@
int stop();
int enable();
int disable();
-
-protected:
-
-private:
- int validateConfig();
};
#endif