Dumping stack traces to proto.
Bug: 72177715
Test: flash device and check incident.proto output
Change-Id: Id2a15e0fc62b66efe875949af97f0eb651c7e322
(cherry picked from commit 5c804e2b9893c7892900148229cf19fa6268e7dc)
diff --git a/cmds/incidentd/src/FdBuffer.cpp b/cmds/incidentd/src/FdBuffer.cpp
index 64da677..3570144 100644
--- a/cmds/incidentd/src/FdBuffer.cpp
+++ b/cmds/incidentd/src/FdBuffer.cpp
@@ -87,6 +87,35 @@
return NO_ERROR;
}
+status_t FdBuffer::readFully(int fd) {
+ mStartTime = uptimeMillis();
+
+ while (true) {
+ if (mBuffer.size() >= MAX_BUFFER_COUNT * BUFFER_SIZE) {
+ // Don't let it get too big.
+ mTruncated = true;
+ VLOG("Truncating data");
+ break;
+ }
+ if (mBuffer.writeBuffer() == NULL) return NO_MEMORY;
+
+ ssize_t amt =
+ TEMP_FAILURE_RETRY(::read(fd, mBuffer.writeBuffer(), mBuffer.currentToWrite()));
+ if (amt < 0) {
+ VLOG("Fail to read %d: %s", fd, strerror(errno));
+ return -errno;
+ } else if (amt == 0) {
+ VLOG("Done reading %zu bytes", mBuffer.size());
+ // We're done.
+ break;
+ }
+ mBuffer.wp()->move(amt);
+ }
+
+ mFinishTime = uptimeMillis();
+ return NO_ERROR;
+}
+
status_t FdBuffer::readProcessedDataInStream(int fd, int toFd, int fromFd, int64_t timeoutMs,
const bool isSysfs) {
struct pollfd pfds[] = {