From 3328e4df15ad92a9aa52ea96241c34c66c7995ff Mon Sep 17 00:00:00 2001 From: Dave Hylands Date: Fri, 28 Feb 2014 12:02:55 -0800 Subject: [PATCH] Bug 977372 - Close IPC'd filedescriptor from device descriptor when finished with it. r=mikeh --- dom/camera/DOMCameraControl.cpp | 7 ++++++- dom/camera/GonkCameraControl.cpp | 4 ++++ 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/dom/camera/DOMCameraControl.cpp b/dom/camera/DOMCameraControl.cpp index 6f56a4e6f36..fa99b954388 100644 --- a/dom/camera/DOMCameraControl.cpp +++ b/dom/camera/DOMCameraControl.cpp @@ -11,6 +11,7 @@ #include "DeviceStorage.h" #include "DeviceStorageFileDescriptor.h" #include "mozilla/dom/TabChild.h" +#include "mozilla/FileUtils.h" #include "mozilla/MediaManager.h" #include "mozilla/Services.h" #include "mozilla/unused.h" @@ -728,7 +729,11 @@ nsDOMCameraControl::OnCreatedFileDescriptor(bool aSucceeded) return; } } - + // An error occured. We need to manually close the file descriptor since + // the FileDescriptor destructor doesn't close file handles which originate + // from other processes. + int fd = mDSFileDescriptor->mFileDescriptor.PlatformHandle(); + ScopedClose autoClose(fd); OnError(CameraControlListener::kInStartRecording, NS_LITERAL_STRING("FAILURE")); } diff --git a/dom/camera/GonkCameraControl.cpp b/dom/camera/GonkCameraControl.cpp index 61c738d55d8..5efde7ec6e3 100644 --- a/dom/camera/GonkCameraControl.cpp +++ b/dom/camera/GonkCameraControl.cpp @@ -856,7 +856,11 @@ nsGonkCameraControl::StartRecordingImpl(DeviceStorageFileDescriptor* aFileDescri } nsresult rv; + // SetupRecording creates a dup of the file descriptor, and since it + // was created in the parent, the FileDescriptor destructor won't close + // it, so we go ahead and close it once we leave this function. int fd = aFileDescriptor->mFileDescriptor.PlatformHandle(); + ScopedClose autoClose(fd); if (aOptions) { rv = SetupRecording(fd, aOptions->rotation, aOptions->maxFileSizeBytes, aOptions->maxVideoLengthMs);