diff options
author | Rom Lemarchand <romlem@google.com> | 2013-03-15 05:17:49 +0000 |
---|---|---|
committer | Android Git Automerger <android-git-automerger@android.com> | 2013-03-15 05:17:49 +0000 |
commit | c113311e6c0458d2ac0901c921fc38ca09074516 (patch) | |
tree | 1e769ecf8aca84ec43ff913fc9db301ff01ec6a9 | |
parent | 89f08da256c468fc0147960ac3324856b9527e6e (diff) | |
parent | 74a7b91cbe29d3a9e6500fb90aae6d9a858dc1f7 (diff) | |
download | system_core-c113311e6c0458d2ac0901c921fc38ca09074516.zip system_core-c113311e6c0458d2ac0901c921fc38ca09074516.tar.gz system_core-c113311e6c0458d2ac0901c921fc38ca09074516.tar.bz2 |
am 74a7b91c: liblogwrap: lock android_fork_execvp
* commit '74a7b91cbe29d3a9e6500fb90aae6d9a858dc1f7':
liblogwrap: lock android_fork_execvp
-rw-r--r-- | logwrapper/logwrap.c | 11 |
1 files changed, 11 insertions, 0 deletions
diff --git a/logwrapper/logwrap.c b/logwrapper/logwrap.c index b2abfe2..129ffb1 100644 --- a/logwrapper/logwrap.c +++ b/logwrapper/logwrap.c @@ -27,6 +27,7 @@ #include <fcntl.h> #include <libgen.h> #include <stdbool.h> +#include <pthread.h> #include <logwrap/logwrap.h> #include "private/android_filesystem_config.h" @@ -35,6 +36,7 @@ #define ARRAY_SIZE(x) (sizeof(x) / sizeof(*(x))) static int signal_fd_write; +static pthread_mutex_t fd_mutex = PTHREAD_MUTEX_INITIALIZER; #define ERROR(fmt, args...) \ do { \ @@ -204,6 +206,12 @@ int android_fork_execvp(int argc, char* argv[], int *status, bool ignore_int_qui int sockets[2]; int rc = 0; + rc = pthread_mutex_lock(&fd_mutex); + if (rc) { + ERROR("failed to lock signal_fd mutex\n"); + goto err_lock; + } + /* Use ptty instead of socketpair so that STDOUT is not buffered */ parent_ptty = open("/dev/ptmx", O_RDWR); if (parent_ptty < 0) { @@ -231,6 +239,7 @@ int android_fork_execvp(int argc, char* argv[], int *status, bool ignore_int_qui rc = -1; goto err_fork; } else if (pid == 0) { + pthread_mutex_unlock(&fd_mutex); pthread_sigmask(SIG_SETMASK, &oldset, NULL); close(parent_ptty); @@ -299,5 +308,7 @@ err_fork: err_ptty: close(parent_ptty); err_open: + pthread_mutex_unlock(&fd_mutex); +err_lock: return rc; } |