Fix memory leaks
Bug: 111407253
Test: manual, libmemunreachable
Change-Id: I69ad7b48498346925dd02c10b206035c0ae49305
diff --git a/media/libmedia/MidiIoWrapper.cpp b/media/libmedia/MidiIoWrapper.cpp
index 1150d61..d8ef9cf 100644
--- a/media/libmedia/MidiIoWrapper.cpp
+++ b/media/libmedia/MidiIoWrapper.cpp
@@ -50,24 +50,15 @@
mDataSource = nullptr;
}
-MidiIoWrapper::MidiIoWrapper(DataSourceBase *source) {
- ALOGV("MidiIoWrapper(DataSource)");
- mFd = -1;
- mDataSource = source;
- off64_t l;
- if (mDataSource->getSize(&l) == OK) {
- mLength = l;
- } else {
- mLength = 0;
- }
-}
-
class DataSourceUnwrapper : public DataSourceBase {
public:
explicit DataSourceUnwrapper(CDataSource *csource) {
mSource = csource;
}
+
+ virtual ~DataSourceUnwrapper() {}
+
virtual status_t initCheck() const { return OK; }
// Returns the number of bytes read, or -1 on failure. It's not an error if
@@ -98,6 +89,7 @@
MidiIoWrapper::MidiIoWrapper(CDataSource *csource) {
ALOGV("MidiIoWrapper(CDataSource)");
mFd = -1;
+ mBase = 0;
mDataSource = new DataSourceUnwrapper(csource);
off64_t l;
if (mDataSource->getSize(&l) == OK) {
@@ -112,6 +104,7 @@
if (mFd >= 0) {
close(mFd);
}
+ delete mDataSource;
}
int MidiIoWrapper::readAt(void *buffer, int offset, int size) {
diff --git a/media/libmedia/include/media/MidiIoWrapper.h b/media/libmedia/include/media/MidiIoWrapper.h
index 6309dda..b19d49e 100644
--- a/media/libmedia/include/media/MidiIoWrapper.h
+++ b/media/libmedia/include/media/MidiIoWrapper.h
@@ -24,12 +24,12 @@
namespace android {
struct CDataSource;
+class DataSourceUnwrapper;
class MidiIoWrapper {
public:
explicit MidiIoWrapper(const char *path);
explicit MidiIoWrapper(int fd, off64_t offset, int64_t size);
- explicit MidiIoWrapper(DataSourceBase *source);
explicit MidiIoWrapper(CDataSource *csource);
~MidiIoWrapper();
@@ -43,7 +43,7 @@
int mFd;
off64_t mBase;
int64_t mLength;
- DataSourceBase *mDataSource;
+ DataSourceUnwrapper *mDataSource;
EAS_FILE mEasFile;
};