From 7c1511c604aa2f13c536f21dfcf31b3d6469b574 Mon Sep 17 00:00:00 2001 From: Paul Licameli Date: Wed, 10 Aug 2016 00:55:41 -0400 Subject: [PATCH] Fix memory leak in global print settings --- src/Printing.cpp | 28 ++++++++++------------------ 1 file changed, 10 insertions(+), 18 deletions(-) diff --git a/src/Printing.cpp b/src/Printing.cpp index 982019316..c7ff94004 100644 --- a/src/Printing.cpp +++ b/src/Printing.cpp @@ -33,8 +33,11 @@ #include "Experimental.h" // Globals, so that we remember settings from session to session -static wxPrintData *gPrintData = NULL; -static wxPageSetupData *gPageSetupData = NULL; +wxPrintData &gPrintData() +{ + static wxPrintData theData; + return theData; +} class AudacityPrintout final : public wxPrintout { @@ -139,28 +142,17 @@ void AudacityPrintout::GetPageInfo(int *minPage, int *maxPage, void HandlePageSetup(wxWindow *parent) { - if (gPageSetupData == NULL) - gPageSetupData = new wxPageSetupDialogData(); - if (gPrintData == NULL) - gPrintData = new wxPrintData(); + wxPageSetupData pageSetupData; - (*gPageSetupData) = *gPrintData; - - wxPageSetupDialog pageSetupDialog(parent, gPageSetupData); + wxPageSetupDialog pageSetupDialog(parent, &pageSetupData); pageSetupDialog.ShowModal(); - (*gPrintData) = pageSetupDialog.GetPageSetupData().GetPrintData(); - (*gPageSetupData) = pageSetupDialog.GetPageSetupData(); + gPrintData() = pageSetupDialog.GetPageSetupData().GetPrintData(); } void HandlePrint(wxWindow *parent, const wxString &name, TrackList *tracks) { - if (gPageSetupData == NULL) - gPageSetupData = new wxPageSetupDialogData(); - if (gPrintData == NULL) - gPrintData = new wxPrintData(); - - wxPrintDialogData printDialogData(*gPrintData); + wxPrintDialogData printDialogData(gPrintData()); wxPrinter printer(&printDialogData); AudacityPrintout printout(name, tracks); @@ -174,6 +166,6 @@ void HandlePrint(wxWindow *parent, const wxString &name, TrackList *tracks) } } else { - *gPrintData = printer.GetPrintDialogData().GetPrintData(); + gPrintData() = printer.GetPrintDialogData().GetPrintData(); } }