summaryrefslogtreecommitdiff
path: root/core/jni/fd_utils.h
diff options
context:
space:
mode:
authorChris Wailes <chriswailes@google.com>2019-01-10 16:55:32 -0800
committerChris Wailes <chriswailes@google.com>2019-01-23 13:34:40 -0800
commit8b35ba25a9663264e6e50867f124f9100953299a (patch)
treeabf86737b0eb7ec947a9ea906ea1687367dd5295 /core/jni/fd_utils.h
parentc0db63f6ac6cf6b784ea6633b037764452c52c91 (diff)
Implemented native functions and types for blastula management.
This patch adds native support for spawning and managing blastula pools, as well as several code cleanups and modernizations. Changes includes: * A function to fork blastulas * A table for managing blastula-related data * Functions for adding and removing blastula data from the aforementioned table * Switching from NULL to nullptr * Replacing string-passing error handling with a curried failure function * Utility functions for handling managed objects * JNI functions for blastula pool management Topic: zygot-prefork Test: make & flash & launch apps & check log for messages Bug: 68253328 Change-Id: I12cd9f2c87a2e3c00d64b683edf3631e29a51551 Merged-In: I12cd9f2c87a2e3c00d64b683edf3631e29a51551
Diffstat (limited to 'core/jni/fd_utils.h')
-rw-r--r--core/jni/fd_utils.h11
1 files changed, 7 insertions, 4 deletions
diff --git a/core/jni/fd_utils.h b/core/jni/fd_utils.h
index 09022a2e2408..2caf1575981a 100644
--- a/core/jni/fd_utils.h
+++ b/core/jni/fd_utils.h
@@ -30,6 +30,9 @@
class FileDescriptorInfo;
+// This type is duplicated in com_android_internal_os_Zygote.cpp
+typedef const std::function<void(std::string)>& fail_fn_t;
+
// Whitelist of open paths that the zygote is allowed to keep open.
//
// In addition to the paths listed in kPathWhitelist in file_utils.cpp, and
@@ -76,19 +79,19 @@ class FileDescriptorTable {
// /proc/self/fd for the list of open file descriptors and collects
// information about them. Returns NULL if an error occurs.
static FileDescriptorTable* Create(const std::vector<int>& fds_to_ignore,
- std::string* error_msg);
+ fail_fn_t fail_fn);
- bool Restat(const std::vector<int>& fds_to_ignore, std::string* error_msg);
+ void Restat(const std::vector<int>& fds_to_ignore, fail_fn_t fail_fn);
// Reopens all file descriptors that are contained in the table. Returns true
// if all descriptors were successfully re-opened or detached, and false if an
// error occurred.
- bool ReopenOrDetach(std::string* error_msg);
+ void ReopenOrDetach(fail_fn_t fail_fn);
private:
explicit FileDescriptorTable(const std::unordered_map<int, FileDescriptorInfo*>& map);
- bool RestatInternal(std::set<int>& open_fds, std::string* error_msg);
+ void RestatInternal(std::set<int>& open_fds, fail_fn_t fail_fn);
static int ParseFd(dirent* e, int dir_fd);