mirror of
https://github.com/ddnet/ddnet.git
synced 2024-09-20 01:24:18 +00:00
Merge pull request #5453 from Robyt3/Joystick-Close-Before-SDL-Quit
Fix segfault in `SDL_JoystickClose` on client quit
This commit is contained in:
commit
af1f0de5fb
|
@ -3354,6 +3354,7 @@ void CClient::Run()
|
|||
m_NetClient[i].Close();
|
||||
|
||||
delete m_pEditor;
|
||||
m_pInput->Shutdown();
|
||||
m_pGraphics->Shutdown();
|
||||
|
||||
// shutdown SDL
|
||||
|
|
|
@ -62,12 +62,6 @@ CInput::CInput()
|
|||
m_aEditingText[0] = 0;
|
||||
}
|
||||
|
||||
CInput::~CInput()
|
||||
{
|
||||
SDL_free(m_pClipboardText);
|
||||
CloseJoysticks();
|
||||
}
|
||||
|
||||
void CInput::Init()
|
||||
{
|
||||
m_pGraphics = Kernel()->RequestInterface<IEngineGraphics>();
|
||||
|
@ -80,6 +74,12 @@ void CInput::Init()
|
|||
InitJoysticks();
|
||||
}
|
||||
|
||||
void CInput::Shutdown()
|
||||
{
|
||||
SDL_free(m_pClipboardText);
|
||||
CloseJoysticks();
|
||||
}
|
||||
|
||||
void CInput::InitJoysticks()
|
||||
{
|
||||
if(!SDL_WasInit(SDL_INIT_JOYSTICK))
|
||||
|
@ -167,18 +167,13 @@ CInput::CJoystick::CJoystick(CInput *pInput, int Index, SDL_Joystick *pDelegate)
|
|||
|
||||
void CInput::CloseJoysticks()
|
||||
{
|
||||
for(auto &Joystick : m_vJoysticks)
|
||||
Joystick.Close();
|
||||
if(SDL_WasInit(SDL_INIT_JOYSTICK))
|
||||
SDL_QuitSubSystem(SDL_INIT_JOYSTICK);
|
||||
|
||||
m_vJoysticks.clear();
|
||||
m_pActiveJoystick = nullptr;
|
||||
}
|
||||
|
||||
void CInput::CJoystick::Close()
|
||||
{
|
||||
if(SDL_JoystickGetAttached(m_pDelegate))
|
||||
SDL_JoystickClose(m_pDelegate);
|
||||
}
|
||||
|
||||
void CInput::SelectNextJoystick()
|
||||
{
|
||||
const int Num = m_vJoysticks.size();
|
||||
|
|
|
@ -43,7 +43,6 @@ public:
|
|||
int GetHatValue(int Hat) override;
|
||||
bool Relative(float *pX, float *pY) override;
|
||||
bool Absolute(float *pX, float *pY) override;
|
||||
void Close();
|
||||
|
||||
static int GetJoystickHatKey(int Hat, int HatValue);
|
||||
};
|
||||
|
@ -97,9 +96,9 @@ private:
|
|||
|
||||
public:
|
||||
CInput();
|
||||
~CInput();
|
||||
|
||||
void Init() override;
|
||||
void Shutdown() override;
|
||||
|
||||
bool ModifierIsPressed() const override { return KeyState(KEY_LCTRL) || KeyState(KEY_RCTRL) || KeyState(KEY_LGUI) || KeyState(KEY_RGUI); }
|
||||
bool KeyIsPressed(int Key) const override { return KeyState(Key); }
|
||||
|
|
|
@ -128,6 +128,7 @@ class IEngineInput : public IInput
|
|||
MACRO_INTERFACE("engineinput", 0)
|
||||
public:
|
||||
virtual void Init() = 0;
|
||||
virtual void Shutdown() = 0;
|
||||
virtual int Update() = 0;
|
||||
virtual int VideoRestartNeeded() = 0;
|
||||
};
|
||||
|
|
Loading…
Reference in a new issue