[c-host] add app_quit for clean shutdown support

This commit is contained in:
Geoffrey McRae 2019-03-02 20:31:33 +11:00
parent b29de8f370
commit 7285f9e9ad
4 changed files with 22 additions and 9 deletions

View File

@ -127,7 +127,7 @@ static bool captureStart(struct CaptureInterface * iface)
return startThreads();
}
int app_main(bool * termSignal)
int app_main()
{
unsigned int shmemSize = os_shmemSize();
uint8_t * shmemMap = NULL;
@ -191,7 +191,7 @@ int app_main(bool * termSignal)
goto exit;
}
while(!*termSignal)
while(app.running)
{
bool hasFrameUpdate = false;
bool hasPointerUpdate = false;
@ -241,3 +241,8 @@ fail:
os_shmemUnmap();
return exitcode;
}
void app_quit()
{
app.running = false;
}

View File

@ -21,7 +21,8 @@ Place, Suite 330, Boston, MA 02111-1307 USA
#include <stdbool.h>
int app_main(bool * termSignal);
int app_main();
void app_quit();
// these must be implemented for each OS

View File

@ -28,6 +28,7 @@ Place, Suite 330, Boston, MA 02111-1307 USA
#include <stdlib.h>
#include <string.h>
#include <pthread.h>
#include <signal.h>
struct app
{
@ -57,6 +58,12 @@ struct osThreadHandle
int resultCode;
};
void sigHandler(int signo)
{
DEBUG_INFO("SIGINT");
app_quit();
}
int main(int argc, char * argv[])
{
static struct option longOptions[] =
@ -160,8 +167,9 @@ int main(int argc, char * argv[])
DEBUG_INFO("KVMFR Device : %s", file);
}
bool termSig = false;
int result = app_main(&termSig);
signal(SIGINT, sigHandler);
int result = app_main();
os_shmemUnmap();
close(app.shmFD);

View File

@ -28,7 +28,6 @@ Place, Suite 330, Boston, MA 02111-1307 USA
static HANDLE shmemHandle = INVALID_HANDLE_VALUE;
static bool shmemOwned = false;
static IVSHMEM_MMAP shmemMap = {0};
static bool termSignal = false;
static HWND messageWnd;
struct osThreadHandle
@ -61,7 +60,7 @@ LRESULT CALLBACK DummyWndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
static int appThread(void * opaque)
{
int result = app_main(&termSignal);
int result = app_main();
SendMessage(messageWnd, WM_CLOSE, 0, 0);
return result;
}
@ -162,7 +161,7 @@ int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine
goto finish_shmem;
}
while(!termSignal)
while(true)
{
MSG msg;
BOOL bRet = GetMessage(&msg, NULL, 0, 0);
@ -183,7 +182,7 @@ int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine
}
shutdown:
termSignal = true;
app_quit();
if (!os_joinThread(thread, &result))
{
DEBUG_ERROR("Failed to join the main application thread");