cutils: add ashmem_init
Add a new ashmem_init function that only dlopens libashmemd_client. This allows the library to be preloaded in the zygote. Test: boots, works Bug: 129543489 Change-Id: Ie106791edf381654f085203c266c9f9c0df35cfc
This commit is contained in:
parent
8c82af2454
commit
8879ed7f2a
3 changed files with 17 additions and 1 deletions
|
@ -73,6 +73,8 @@ static pthread_mutex_t __ashmem_lock = PTHREAD_MUTEX_INITIALIZER;
|
|||
#ifndef __ANDROID_VNDK__
|
||||
using openFdType = int (*)();
|
||||
|
||||
static openFdType openFd;
|
||||
|
||||
openFdType initOpenAshmemFd() {
|
||||
openFdType openFd = nullptr;
|
||||
void* handle = dlopen("libashmemd_client.so", RTLD_NOW);
|
||||
|
@ -221,7 +223,10 @@ static int __ashmem_open_locked()
|
|||
|
||||
int fd = -1;
|
||||
#ifndef __ANDROID_VNDK__
|
||||
static auto openFd = initOpenAshmemFd();
|
||||
if (!openFd) {
|
||||
openFd = initOpenAshmemFd();
|
||||
}
|
||||
|
||||
if (openFd) {
|
||||
fd = openFd();
|
||||
}
|
||||
|
@ -480,3 +485,11 @@ int ashmem_get_size_region(int fd)
|
|||
|
||||
return __ashmem_check_failure(fd, TEMP_FAILURE_RETRY(ioctl(fd, ASHMEM_GET_SIZE, NULL)));
|
||||
}
|
||||
|
||||
void ashmem_init() {
|
||||
#ifndef __ANDROID_VNDK__
|
||||
pthread_mutex_lock(&__ashmem_lock);
|
||||
openFd = initOpenAshmemFd();
|
||||
pthread_mutex_unlock(&__ashmem_lock);
|
||||
#endif //__ANDROID_VNDK__
|
||||
}
|
||||
|
|
|
@ -82,3 +82,5 @@ int ashmem_get_size_region(int fd)
|
|||
|
||||
return buf.st_size;
|
||||
}
|
||||
|
||||
void ashmem_init() {}
|
||||
|
|
|
@ -26,6 +26,7 @@ int ashmem_set_prot_region(int fd, int prot);
|
|||
int ashmem_pin_region(int fd, size_t offset, size_t len);
|
||||
int ashmem_unpin_region(int fd, size_t offset, size_t len);
|
||||
int ashmem_get_size_region(int fd);
|
||||
void ashmem_init();
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue