Example #1
0
void svExec::Terminate(void)
{
#if !defined(__WIN32__) && !defined(__ANDROID__)
    if (pid == -1) return;
    if (skt) {
        delete skt;
        skt = NULL;
    }

    struct timeval tv_now, tv_timeout;
    gettimeofday(&tv_timeout, NULL);
    tv_timeout.tv_sec += _SUVA_APP_WAIT;

    svEvent *event;
    for ( ;; ) {
        while ((event = PopWaitEvent(1000))) {
            switch (event->GetId()) {
            case svEVT_QUIT:
                return;

            case svEVT_CHILD_EXIT:
                svEventChildExit *event_child;
                event_child = (svEventChildExit *)event;
                if (event_child->GetPid() != pid)
                    break;
                Exited(event_child->GetStatus());
                delete event_child;
                return;

            default:
                break;
            }

            delete event;
        }

        gettimeofday(&tv_now, NULL);
        if (tv_now.tv_sec > tv_timeout.tv_sec) {
            kill(pid, SIGTERM);
            svError("%s: Timed-out waiting on application to exit: %d",
                name.c_str(), pid);
            break;
        }
    }
#endif
}
Example #2
0
void *svThreadStorage::Entry(void)
{
	PurgePoolClients();

	for ( ;; ) {
		svEvent *event = PopWaitEvent();
		switch (event->GetId()) {
		case svEVT_QUIT:
			return NULL;
		case svEVT_SESSION_QUIT:
			delete event;
			return NULL;
		case svEVT_HOSTKEY_REQUEST:
			GetHostKey((svEventHostKeyRequest *)event);
			break;
		case svEVT_POOLCLIENT_UPDATE:
			UpdatePoolClient((svEventPoolClientUpdate *)event);
			break;
		default:
			break;
		}
		delete event;
	}
}