diff --git a/cmds/incidentd/src/IncidentService.cpp b/cmds/incidentd/src/IncidentService.cpp index 9e6d0a23de10f..dc1612575f382 100644 --- a/cmds/incidentd/src/IncidentService.cpp +++ b/cmds/incidentd/src/IncidentService.cpp @@ -351,9 +351,9 @@ Status IncidentService::reportIncidentToDumpstate(unique_fd stream, Status IncidentService::registerSection(const int id, const String16& name16, const sp& callback) { - const char* name = String8(name16).c_str(); + const String8 name = String8(name16); const uid_t callingUid = IPCThreadState::self()->getCallingUid(); - ALOGI("Uid %d registers section %d '%s'", callingUid, id, name); + ALOGI("Uid %d registers section %d '%s'", callingUid, id, name.c_str()); if (callback == nullptr) { return Status::fromExceptionCode(Status::EX_NULL_POINTER); } @@ -363,11 +363,11 @@ Status IncidentService::registerSection(const int id, const String16& name16, ALOGW("Error registering section %d: calling uid does not match", id); return Status::fromExceptionCode(Status::EX_SECURITY); } - mRegisteredSections.at(i) = new BringYourOwnSection(id, name, callingUid, callback); + mRegisteredSections.at(i) = new BringYourOwnSection(id, name.c_str(), callingUid, callback); return Status::ok(); } } - mRegisteredSections.push_back(new BringYourOwnSection(id, name, callingUid, callback)); + mRegisteredSections.push_back(new BringYourOwnSection(id, name.c_str(), callingUid, callback)); return Status::ok(); } diff --git a/cmds/incidentd/src/Section.cpp b/cmds/incidentd/src/Section.cpp index b629e42517625..7fc999af6f785 100644 --- a/cmds/incidentd/src/Section.cpp +++ b/cmds/incidentd/src/Section.cpp @@ -875,7 +875,9 @@ BringYourOwnSection::~BringYourOwnSection() {} status_t BringYourOwnSection::BlockingCall(unique_fd& pipeWriteFd) const { android::os::ParcelFileDescriptor pfd(std::move(pipeWriteFd)); - mCallback->onDumpSection(pfd); + if(mCallback != nullptr) { + mCallback->onDumpSection(pfd); + } return NO_ERROR; } diff --git a/cmds/incidentd/src/Section.h b/cmds/incidentd/src/Section.h index 7f4b66482c735..698cc04c160e9 100644 --- a/cmds/incidentd/src/Section.h +++ b/cmds/incidentd/src/Section.h @@ -207,7 +207,7 @@ public: virtual status_t BlockingCall(unique_fd& pipeWriteFd) const; private: - const sp& mCallback; + const sp mCallback; }; diff --git a/core/java/android/os/IIncidentDumpCallback.aidl b/core/java/android/os/IIncidentDumpCallback.aidl index 09b5b01367c18..d94df34f6be97 100644 --- a/core/java/android/os/IIncidentDumpCallback.aidl +++ b/core/java/android/os/IIncidentDumpCallback.aidl @@ -25,7 +25,8 @@ import android.os.ParcelFileDescriptor; */ oneway interface IIncidentDumpCallback { /** - * Dumps section data to the given ParcelFileDescriptor. + * Dumps section data to the given ParcelFileDescriptor, which needs to be + * closed properly after writing the data. */ void onDumpSection(in ParcelFileDescriptor fd); }