diff --git a/Aerofoil/GpFiber_Win32.cpp b/Aerofoil/GpFiber_Win32.cpp index bd675f8..213ee41 100644 --- a/Aerofoil/GpFiber_Win32.cpp +++ b/Aerofoil/GpFiber_Win32.cpp @@ -11,6 +11,11 @@ void GpFiber_Win32::YieldTo(IGpFiber *toFiber) SwitchToFiber(static_cast(toFiber)->m_fiber); } +void GpFiber_Win32::YieldToTerminal(IGpFiber *toFiber) +{ + YieldTo(toFiber); +} + void GpFiber_Win32::Destroy() { this->~GpFiber_Win32(); diff --git a/Aerofoil/GpFiber_Win32.h b/Aerofoil/GpFiber_Win32.h index 2c1b30c..8007878 100644 --- a/Aerofoil/GpFiber_Win32.h +++ b/Aerofoil/GpFiber_Win32.h @@ -6,6 +6,7 @@ class GpFiber_Win32 final : public IGpFiber { public: void YieldTo(IGpFiber *toFiber) override; + void YieldToTerminal(IGpFiber *toFiber) override; void Destroy() override; static IGpFiber *Create(LPVOID fiber); diff --git a/AerofoilSDL/GpFiber_SDL.cpp b/AerofoilSDL/GpFiber_SDL.cpp index f4cfc78..8cef8cb 100644 --- a/AerofoilSDL/GpFiber_SDL.cpp +++ b/AerofoilSDL/GpFiber_SDL.cpp @@ -19,6 +19,11 @@ void GpFiber_SDL::YieldTo(IGpFiber *toFiber) m_event->Wait(); } +void GpFiber_SDL::YieldToTerminal(IGpFiber *toFiber) +{ + static_cast(toFiber)->m_event->Signal(); +} + void GpFiber_SDL::Destroy() { delete this; diff --git a/AerofoilSDL/GpFiber_SDL.h b/AerofoilSDL/GpFiber_SDL.h index d019fa1..0d05830 100644 --- a/AerofoilSDL/GpFiber_SDL.h +++ b/AerofoilSDL/GpFiber_SDL.h @@ -16,6 +16,7 @@ public: ~GpFiber_SDL(); void YieldTo(IGpFiber *fromFiber) override; + void YieldToTerminal(IGpFiber *fromFiber) override; void Destroy() override; private: diff --git a/GpCommon/IGpFiber.h b/GpCommon/IGpFiber.h index c9646a4..4990eac 100644 --- a/GpCommon/IGpFiber.h +++ b/GpCommon/IGpFiber.h @@ -5,5 +5,6 @@ struct IGpFiber { virtual void YieldTo(IGpFiber *toFiber) = 0; + virtual void YieldToTerminal(IGpFiber *toFiber) = 0; virtual void Destroy() = 0; }; diff --git a/GpShell/GpAppEnvironment.cpp b/GpShell/GpAppEnvironment.cpp index a323e3f..4ec01cb 100644 --- a/GpShell/GpAppEnvironment.cpp +++ b/GpShell/GpAppEnvironment.cpp @@ -141,7 +141,7 @@ void GpAppEnvironment::AppThreadFunc() GpAppInterface_Get()->ApplicationMain(); m_applicationState = ApplicationState_Terminated; - m_applicationFiber->YieldTo(m_vosFiber); + m_applicationFiber->YieldToTerminal(m_vosFiber); } void GpAppEnvironment::InitializeApplicationState()