Bug 1412643 - Part 2 - make the memory management in print IPC clearer; r?bobowen draft
authorAlex Gaynor <agaynor@mozilla.com>
Mon, 30 Oct 2017 13:49:21 -0400
changeset 690233 81f2b3db7f68b8db5891aea73654df141b1ce0b2
parent 690232 23f64beae0e933846f242e69d7a681e2d977f93b
child 690234 178ee8361e88a4d106e807a95b9badb4cdff9714
push id87244
push userbmo:agaynor@mozilla.com
push dateWed, 01 Nov 2017 19:14:41 +0000
reviewersbobowen
bugs1412643
milestone58.0a1
Bug 1412643 - Part 2 - make the memory management in print IPC clearer; r?bobowen This should result in cleaner crashes if methods are called out of order MozReview-Commit-ID: GaDktXtHrsm
layout/printing/ipc/RemotePrintJobChild.cpp
layout/printing/ipc/RemotePrintJobChild.h
--- a/layout/printing/ipc/RemotePrintJobChild.cpp
+++ b/layout/printing/ipc/RemotePrintJobChild.cpp
@@ -43,16 +43,23 @@ RemotePrintJobChild::RecvPrintInitializa
   mPrintInitialized = true;
   mInitializationResult = aRv;
   if (NS_SUCCEEDED(aRv)) {
     SetNextPageFD(aFd);
   }
   return IPC_OK();
 }
 
+PRFileDesc* RemotePrintJobChild::GetNextPageFD() {
+  MOZ_ASSERT(mNextPageFD);
+  PRFileDesc* fd = mNextPageFD;
+  mNextPageFD = nullptr;
+  return fd;
+}
+
 void RemotePrintJobChild::SetNextPageFD(const mozilla::ipc::FileDescriptor& aFd)
 {
   auto handle = aFd.ClonePlatformHandle();
   mNextPageFD = PR_ImportFile(PROsfd(handle.release()));
 }
 
 void
 RemotePrintJobChild::ProcessPage()
--- a/layout/printing/ipc/RemotePrintJobChild.h
+++ b/layout/printing/ipc/RemotePrintJobChild.h
@@ -42,27 +42,25 @@ public:
   mozilla::ipc::IPCResult RecvPageProcessed(const FileDescriptor& aFd) final;
 
   mozilla::ipc::IPCResult RecvAbortPrint(const nsresult& aRv) final;
 
   void SetPagePrintTimer(nsPagePrintTimer* aPagePrintTimer);
 
   void SetPrintEngine(nsPrintEngine* aPrintEngine);
 
-  PRFileDesc *GetNextPageFD() {
-    return mNextPageFD;
-  }
+  PRFileDesc* GetNextPageFD();
 
 private:
   ~RemotePrintJobChild() final;
   void SetNextPageFD(const mozilla::ipc::FileDescriptor& aFd);
 
   bool mPrintInitialized = false;
   nsresult mInitializationResult = NS_OK;
   RefPtr<nsPagePrintTimer> mPagePrintTimer;
   RefPtr<nsPrintEngine> mPrintEngine;
-  PRFileDesc* mNextPageFD;
+  PRFileDesc* mNextPageFD = nullptr;
 };
 
 } // namespace layout
 } // namespace mozilla
 
 #endif // mozilla_layout_RemotePrintJobChild_h