Merge "StagefrightRecorder:close next filedescriptor"
diff --git a/media/libmediaplayerservice/StagefrightRecorder.cpp b/media/libmediaplayerservice/StagefrightRecorder.cpp
index 3e3872d..624f596 100644
--- a/media/libmediaplayerservice/StagefrightRecorder.cpp
+++ b/media/libmediaplayerservice/StagefrightRecorder.cpp
@@ -402,12 +402,11 @@
// start with a clean, empty file
ftruncate(fd, 0);
- int nextFd = dup(fd);
if (mWriter == NULL) {
ALOGE("setNextOutputFile failed. Writer has been freed");
return INVALID_OPERATION;
}
- return mWriter->setNextFd(nextFd);
+ return mWriter->setNextFd(fd);
}
// Attempt to parse an float literal optionally surrounded by whitespace,
diff --git a/media/libstagefright/MPEG4Writer.cpp b/media/libstagefright/MPEG4Writer.cpp
index f6ed0f1..a52da45 100644
--- a/media/libstagefright/MPEG4Writer.cpp
+++ b/media/libstagefright/MPEG4Writer.cpp
@@ -460,7 +460,7 @@
};
MPEG4Writer::MPEG4Writer(int fd) {
- initInternal(fd, true /*isFirstSession*/);
+ initInternal(dup(fd), true /*isFirstSession*/);
}
MPEG4Writer::~MPEG4Writer() {
@@ -481,7 +481,7 @@
void MPEG4Writer::initInternal(int fd, bool isFirstSession) {
ALOGV("initInternal");
- mFd = dup(fd);
+ mFd = fd;
mNextFd = -1;
mInitCheck = mFd < 0? NO_INIT: OK;
@@ -1044,6 +1044,10 @@
void MPEG4Writer::release() {
close(mFd);
mFd = -1;
+ if (mNextFd != -1) {
+ close(mNextFd);
+ mNextFd = -1;
+ }
mInitCheck = NO_INIT;
mStarted = false;
free(mInMemoryCache);
@@ -1981,7 +1985,7 @@
// No need to set a new FD yet.
return INVALID_OPERATION;
}
- mNextFd = fd;
+ mNextFd = dup(fd);
return OK;
}
@@ -2180,11 +2184,11 @@
switch (msg->what()) {
case kWhatSwitch:
{
- finishCurrentSession();
mLock.lock();
int fd = mNextFd;
mNextFd = -1;
mLock.unlock();
+ finishCurrentSession();
initInternal(fd, false /*isFirstSession*/);
start(mStartMeta.get());
mSwitchPending = false;