mirror of https://github.com/stella-emu/stella.git
Fix segfault on some systems when using BrowserDialog during a program run.
Remove old debugging print code.
This commit is contained in:
parent
79da2e1d8a
commit
c3fa1890d5
|
@ -71,8 +71,6 @@ FBBackendSDL2::~FBBackendSDL2()
|
||||||
myWindow = nullptr;
|
myWindow = nullptr;
|
||||||
}
|
}
|
||||||
SDL_QuitSubSystem(SDL_INIT_VIDEO | SDL_INIT_TIMER);
|
SDL_QuitSubSystem(SDL_INIT_VIDEO | SDL_INIT_TIMER);
|
||||||
|
|
||||||
cerr << "~FBBackendSDL2()" << endl;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||||
|
|
|
@ -40,8 +40,6 @@ namespace {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static int REF_COUNT = 0;
|
|
||||||
|
|
||||||
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||||
FBSurfaceSDL2::FBSurfaceSDL2(FBBackendSDL2& backend,
|
FBSurfaceSDL2::FBSurfaceSDL2(FBBackendSDL2& backend,
|
||||||
uInt32 width, uInt32 height,
|
uInt32 width, uInt32 height,
|
||||||
|
@ -50,7 +48,6 @@ FBSurfaceSDL2::FBSurfaceSDL2(FBBackendSDL2& backend,
|
||||||
: myBackend{backend},
|
: myBackend{backend},
|
||||||
myInterpolationMode{inter}
|
myInterpolationMode{inter}
|
||||||
{
|
{
|
||||||
REF_COUNT++;
|
|
||||||
createSurface(width, height, staticData);
|
createSurface(width, height, staticData);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -61,8 +58,6 @@ FBSurfaceSDL2::~FBSurfaceSDL2()
|
||||||
|
|
||||||
if(mySurface)
|
if(mySurface)
|
||||||
{
|
{
|
||||||
REF_COUNT--;
|
|
||||||
cerr << " ~FBSurfaceSDL2(): " << this << " " << REF_COUNT << endl;
|
|
||||||
SDL_FreeSurface(mySurface);
|
SDL_FreeSurface(mySurface);
|
||||||
mySurface = nullptr;
|
mySurface = nullptr;
|
||||||
}
|
}
|
||||||
|
|
|
@ -68,7 +68,6 @@ FrameBuffer::FrameBuffer(OSystem& osystem)
|
||||||
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||||
FrameBuffer::~FrameBuffer()
|
FrameBuffer::~FrameBuffer()
|
||||||
{
|
{
|
||||||
cerr << "~FrameBuffer()\n";
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||||
|
@ -911,10 +910,7 @@ shared_ptr<FBSurface> FrameBuffer::allocateSurface(
|
||||||
void FrameBuffer::deallocateSurface(shared_ptr<FBSurface> surface)
|
void FrameBuffer::deallocateSurface(shared_ptr<FBSurface> surface)
|
||||||
{
|
{
|
||||||
if(surface)
|
if(surface)
|
||||||
{
|
|
||||||
cerr << "deallocateSurface: " << surface << endl;
|
|
||||||
mySurfaceList.remove(surface);
|
mySurfaceList.remove(surface);
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||||
|
|
|
@ -31,6 +31,7 @@
|
||||||
#include "Debugger.hxx"
|
#include "Debugger.hxx"
|
||||||
#endif
|
#endif
|
||||||
#ifdef GUI_SUPPORT
|
#ifdef GUI_SUPPORT
|
||||||
|
#include "BrowserDialog.hxx"
|
||||||
#include "OptionsMenu.hxx"
|
#include "OptionsMenu.hxx"
|
||||||
#include "CommandMenu.hxx"
|
#include "CommandMenu.hxx"
|
||||||
#include "HighScoresMenu.hxx"
|
#include "HighScoresMenu.hxx"
|
||||||
|
@ -112,7 +113,13 @@ OSystem::OSystem()
|
||||||
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||||
OSystem::~OSystem()
|
OSystem::~OSystem()
|
||||||
{
|
{
|
||||||
cerr << "~OSystem()\n";
|
#ifdef GUI_SUPPORT
|
||||||
|
// BrowserDialog is a special dialog that is statically allocated
|
||||||
|
// So we need to make sure that it is destroyed in the normal d'tor chain;
|
||||||
|
// not at the very end of program exit, when some objects it requires
|
||||||
|
// have already been destroyed
|
||||||
|
BrowserDialog::hide();
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||||
|
|
|
@ -115,6 +115,7 @@ BrowserDialog::BrowserDialog(GuiObject* boss, const GUI::Font& font,
|
||||||
}
|
}
|
||||||
|
|
||||||
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||||
|
// static
|
||||||
void BrowserDialog::show(GuiObject* parent, const GUI::Font& font,
|
void BrowserDialog::show(GuiObject* parent, const GUI::Font& font,
|
||||||
const string& title, const string& startpath,
|
const string& title, const string& startpath,
|
||||||
BrowserDialog::Mode mode,
|
BrowserDialog::Mode mode,
|
||||||
|
@ -127,8 +128,6 @@ void BrowserDialog::show(GuiObject* parent, const GUI::Font& font,
|
||||||
if(w > uInt32(font.getMaxCharWidth() * 80))
|
if(w > uInt32(font.getMaxCharWidth() * 80))
|
||||||
w = font.getMaxCharWidth() * 80;
|
w = font.getMaxCharWidth() * 80;
|
||||||
|
|
||||||
static unique_ptr<BrowserDialog> ourBrowser{nullptr};
|
|
||||||
|
|
||||||
if(ourBrowser == nullptr
|
if(ourBrowser == nullptr
|
||||||
|| ourBrowser->getWidth() != int(w) || ourBrowser->getHeight() != int(h))
|
|| ourBrowser->getWidth() != int(w) || ourBrowser->getHeight() != int(h))
|
||||||
ourBrowser = make_unique<BrowserDialog>(parent, font, w, h);
|
ourBrowser = make_unique<BrowserDialog>(parent, font, w, h);
|
||||||
|
@ -138,6 +137,7 @@ void BrowserDialog::show(GuiObject* parent, const GUI::Font& font,
|
||||||
}
|
}
|
||||||
|
|
||||||
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||||
|
// static
|
||||||
void BrowserDialog::show(GuiObject* parent,
|
void BrowserDialog::show(GuiObject* parent,
|
||||||
const string& title, const string& startpath,
|
const string& title, const string& startpath,
|
||||||
BrowserDialog::Mode mode,
|
BrowserDialog::Mode mode,
|
||||||
|
@ -148,6 +148,13 @@ void BrowserDialog::show(GuiObject* parent,
|
||||||
mode, command, namefilter);
|
mode, command, namefilter);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||||
|
// static
|
||||||
|
void BrowserDialog::hide()
|
||||||
|
{
|
||||||
|
ourBrowser.reset();
|
||||||
|
}
|
||||||
|
|
||||||
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||||
void BrowserDialog::show(const string& startpath,
|
void BrowserDialog::show(const string& startpath,
|
||||||
BrowserDialog::Mode mode,
|
BrowserDialog::Mode mode,
|
||||||
|
@ -326,3 +333,6 @@ void BrowserDialog::updateUI(bool fileSelected)
|
||||||
if(fileSelected && !_fileList->selected().isDirectory())
|
if(fileSelected && !_fileList->selected().isDirectory())
|
||||||
_selected->setText(_fileList->getSelectedString());
|
_selected->setText(_fileList->getSelectedString());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||||
|
unique_ptr<BrowserDialog> BrowserDialog::ourBrowser;
|
||||||
|
|
|
@ -85,6 +85,14 @@ class BrowserDialog : public Dialog
|
||||||
const FilesystemNode::NameFilter& namefilter = {
|
const FilesystemNode::NameFilter& namefilter = {
|
||||||
[](const FilesystemNode&) { return true; } });
|
[](const FilesystemNode&) { return true; } });
|
||||||
|
|
||||||
|
/**
|
||||||
|
Since the show methods allocate a static BrowserDialog, at some
|
||||||
|
point we need to manually de-allocate it. This method must be
|
||||||
|
called from one of the lowest-level destructors to do that.
|
||||||
|
Currently this is called from the OSystem destructor.
|
||||||
|
*/
|
||||||
|
static void hide();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
/** Place the browser window onscreen, using the given attributes */
|
/** Place the browser window onscreen, using the given attributes */
|
||||||
void show(const string& startpath,
|
void show(const string& startpath,
|
||||||
|
@ -119,6 +127,8 @@ class BrowserDialog : public Dialog
|
||||||
|
|
||||||
BrowserDialog::Mode _mode{Mode::Directories};
|
BrowserDialog::Mode _mode{Mode::Directories};
|
||||||
|
|
||||||
|
static unique_ptr<BrowserDialog> ourBrowser;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
// Following constructors and assignment operators not supported
|
// Following constructors and assignment operators not supported
|
||||||
BrowserDialog() = delete;
|
BrowserDialog() = delete;
|
||||||
|
|
Loading…
Reference in New Issue