using namespace ::android::hardware;
using namespace ::android::hidl::manager::V1_0;
using namespace ::android::hidl::base::V1_0;
- auto ret = timeoutIPC(manager, &IServiceManager::debugDump, [&] (const auto &infos) {
+ using std::literals::chrono_literals::operator""s;
+ auto ret = timeoutIPC(2s, manager, &IServiceManager::debugDump, [&] (const auto &infos) {
std::map<std::string, TableEntry> entries;
for (const auto &info : infos) {
std::string interfaceName = std::string{info.interfaceName.c_str()} + "/" +
.transport = "passthrough",
.serverPid = NO_PID,
.serverObjectAddress = NO_PTR,
- .clientPids = {},
+ .clientPids = info.clientPids,
.arch = ARCH_UNKNOWN
}).first->second.arch |= fromBaseArchitecture(info.arch);
}
return success;
}
-template<class Function, class I, class... Args>
+template<class R, class P, class Function, class I, class... Args>
typename std::result_of<Function(I *, Args...)>::type
-timeoutIPC(const sp<I> &interfaceObject, Function &&func, Args &&... args) {
+timeoutIPC(std::chrono::duration<R, P> wait, const sp<I> &interfaceObject, Function &&func,
+ Args &&... args) {
using ::android::hardware::Status;
typename std::result_of<Function(I *, Args...)>::type ret{Status::ok()};
auto boundFunc = std::bind(std::forward<Function>(func),
interfaceObject.get(), std::forward<Args>(args)...);
- bool success = timeout(IPC_CALL_WAIT, [&ret, &boundFunc] {
+ bool success = timeout(wait, [&ret, &boundFunc] {
ret = std::move(boundFunc());
});
if (!success) {
return ret;
}
+template<class Function, class I, class... Args>
+typename std::result_of<Function(I *, Args...)>::type
+timeoutIPC(const sp<I> &interfaceObject, Function &&func, Args &&... args) {
+ return timeoutIPC(IPC_CALL_WAIT, interfaceObject, func, args...);
+}
+
+
} // namespace lshal
} // namespace android