vcl/source/gdi/print3.cxx | 28 ++++++++++++++++++---------- 1 file changed, 18 insertions(+), 10 deletions(-)
New commits: commit a298648302b4ba7765816f3fbe4d89c0cfcb3a57 Author: Michael Meeks <michael.me...@collabora.com> Date: Thu Mar 23 11:24:22 2017 +0000 vcl printer: hold a reference on mxPrinter member while operating on it. Hopefully addresses: http://crashreport.libreoffice.org/stats/crash_details/7a33b96a-b479-47a4-a006-eb62718128cc Change-Id: I221c04a6626a39449405387343cdc43e9f02dee1 Reviewed-on: https://gerrit.libreoffice.org/35587 Tested-by: Jenkins <c...@libreoffice.org> Reviewed-by: Michael Meeks <michael.me...@collabora.com> diff --git a/vcl/source/gdi/print3.cxx b/vcl/source/gdi/print3.cxx index 63da93c899b2..28ebd80b9473 100644 --- a/vcl/source/gdi/print3.cxx +++ b/vcl/source/gdi/print3.cxx @@ -798,14 +798,18 @@ void PrinterController::resetPrinterOptions( bool i_bFileOutput ) bool PrinterController::setupPrinter( vcl::Window* i_pParent ) { bool bRet = false; - if( mpImplData->mxPrinter.get() ) + + // Important to hold printer alive while doing setup etc. + VclPtr< Printer > xPrinter = mpImplData->mxPrinter; + + if( xPrinter.get() ) { - mpImplData->mxPrinter->Push(); - mpImplData->mxPrinter->SetMapMode(MapMode(MapUnit::Map100thMM)); + xPrinter->Push(); + xPrinter->SetMapMode(MapMode(MapUnit::Map100thMM)); // get current data - Size aPaperSize(mpImplData->mxPrinter->GetPaperSize()); - sal_uInt16 nPaperBin = mpImplData->mxPrinter->GetPaperBin(); + Size aPaperSize(xPrinter->GetPaperSize()); + sal_uInt16 nPaperBin = xPrinter->GetPaperBin(); // reset paper size back to last configured size, not // whatever happens to be the current page @@ -817,8 +821,12 @@ bool PrinterController::setupPrinter( vcl::Window* i_pParent ) } // call driver setup - bRet = mpImplData->mxPrinter->Setup( i_pParent, getPapersizeFromSetup() ); - Size aNewPaperSize(mpImplData->mxPrinter->GetPaperSize()); + bRet = xPrinter->Setup( i_pParent, getPapersizeFromSetup() ); + SAL_WARN_IF(xPrinter != mpImplData->mxPrinter, "vcl.gdi", + "Printer changed underneath us during setup"); + xPrinter = mpImplData->mxPrinter; + + Size aNewPaperSize(xPrinter->GetPaperSize()); if (bRet) { bool bInvalidateCache = false; @@ -832,7 +840,7 @@ bool PrinterController::setupPrinter( vcl::Window* i_pParent ) } // was bin overridden ? if so we need to take action - sal_uInt16 nNewPaperBin = mpImplData->mxPrinter->GetPaperBin(); + sal_uInt16 nNewPaperBin = xPrinter->GetPaperBin(); if (nNewPaperBin != nPaperBin) { mpImplData->mnFixedPaperBin = nNewPaperBin; @@ -848,9 +856,9 @@ bool PrinterController::setupPrinter( vcl::Window* i_pParent ) { //restore to whatever it was before we entered this method if (aPaperSize != aNewPaperSize) - mpImplData->mxPrinter->SetPaperSizeUser(aPaperSize, !mpImplData->isFixedPageSize()); + xPrinter->SetPaperSizeUser(aPaperSize, !mpImplData->isFixedPageSize()); } - mpImplData->mxPrinter->Pop(); + xPrinter->Pop(); } return bRet; } _______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits