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
--- 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