diff options
Diffstat (limited to 'libcutils')
-rw-r--r-- | libcutils/fs.c | 2 | ||||
-rw-r--r-- | libcutils/sched_policy.c | 19 | ||||
-rw-r--r-- | libcutils/str_parms.c | 4 |
3 files changed, 15 insertions, 10 deletions
diff --git a/libcutils/fs.c b/libcutils/fs.c index 286a8eb..45c7add 100644 --- a/libcutils/fs.c +++ b/libcutils/fs.c @@ -212,7 +212,7 @@ int fs_mkdirs(const char* path, mode_t mode) { /* Yay, segment is ready for us to step into */ int next_fd; - if ((next_fd = openat(fd, segment, 0)) == -1) { + if ((next_fd = openat(fd, segment, O_NOFOLLOW | O_CLOEXEC)) == -1) { ALOGE("Failed to openat(%s): %s", buf, strerror(errno)); res = -errno; goto done_close; diff --git a/libcutils/sched_policy.c b/libcutils/sched_policy.c index 12fc734..d3cedd4 100644 --- a/libcutils/sched_policy.c +++ b/libcutils/sched_policy.c @@ -39,21 +39,20 @@ static inline SchedPolicy _policy(SchedPolicy p) #if defined(HAVE_ANDROID_OS) && defined(HAVE_SCHED_H) && defined(HAVE_PTHREADS) -#include <sched.h> #include <pthread.h> - -#ifndef SCHED_NORMAL - #define SCHED_NORMAL 0 -#endif - -#ifndef SCHED_BATCH - #define SCHED_BATCH 3 -#endif +#include <sched.h> +#include <sys/prctl.h> #define POLICY_DEBUG 0 #define CAN_SET_SP_SYSTEM 0 // non-zero means to implement set_sched_policy(tid, SP_SYSTEM) +// This prctl is only available in Android kernels. +#define PR_SET_TIMERSLACK_PID 41 + +// timer slack value in nS enforced when the thread moves to background +#define TIMER_SLACK_BG 40000000 + static pthread_once_t the_once = PTHREAD_ONCE_INIT; static int __sys_supports_schedgroups = -1; @@ -321,6 +320,8 @@ int set_sched_policy(int tid, SchedPolicy policy) ¶m); } + prctl(PR_SET_TIMERSLACK_PID, policy == SP_BACKGROUND ? TIMER_SLACK_BG : 0, tid); + return 0; } diff --git a/libcutils/str_parms.c b/libcutils/str_parms.c index 2e3ce9f..dfe8c4b 100644 --- a/libcutils/str_parms.c +++ b/libcutils/str_parms.c @@ -262,6 +262,10 @@ int str_parms_add_float(struct str_parms *str_parms, const char *key, return ret; } +int str_parms_has_key(struct str_parms *str_parms, const char *key) { + return hashmapGet(str_parms->map, (void *)key) != NULL; +} + int str_parms_get_str(struct str_parms *str_parms, const char *key, char *val, int len) { |