Fix a lambda capture problem in TextDumpsysSection
The [&] capture does not handle smart pointers (unique_ptr, unique_fd
etc) well, which lead to leaked pointers. Fix by explicitly move the
smart pointers.
Bug: 158097879
Test: Build, flash and take an incident report. Verify no crash
Change-Id: I5150aa3dddf9d59c1c9d6d32370370e8cde23946
diff --git a/cmds/incidentd/src/Section.cpp b/cmds/incidentd/src/Section.cpp
index 61e5eb0..33e7649 100644
--- a/cmds/incidentd/src/Section.cpp
+++ b/cmds/incidentd/src/Section.cpp
@@ -477,14 +477,15 @@
// Run dumping thread
const uint64_t start = Nanotime();
- std::thread worker([&]() {
+ std::thread worker([write_fd = std::move(dumpPipe.writeFd()), service = std::move(service),
+ this]() mutable {
// Don't crash the service if writing to a closed pipe (may happen if dumping times out)
signal(SIGPIPE, sigpipe_handler);
- status_t err = service->dump(dumpPipe.writeFd().get(), mArgs);
+ status_t err = service->dump(write_fd.get(), this->mArgs);
if (err != OK) {
ALOGW("[%s] dump thread failed. Error: %s", this->name.string(), strerror(-err));
}
- dumpPipe.writeFd().reset();
+ write_fd.reset();
});
// Collect dump content