/**
 * Terminate Mondo in response to a signal.
 * @param sig The signal number received.
 */
void terminate_daemon(int sig)
{
	char tmp[64];
	char tmp2[MAX_STR_LEN];
	//  char command[512];
	//  pid_t pid;

	switch (sig) {
	case SIGINT:
		sprintf(tmp, "SIGINT");
		strcpy(tmp2, "You interrupted me :-)");
		break;
	case SIGKILL:
		sprintf(tmp, "SIGKILL");
		strcpy(tmp2,
			   "I seriously have no clue how this signal even got to me. Something's wrong with your system.");
		break;
	case SIGTERM:
		sprintf(tmp, "SIGTERM");
		strcpy(tmp2, "Got terminate signal");
		break;
	case SIGHUP:
		sprintf(tmp, "SIGHUP");
		strcpy(tmp2, "Hangup on line");
		break;
	case SIGSEGV:
		sprintf(tmp, "SIGSEGV");
		strcpy(tmp2,
			   "Internal programming error. Please send a backtrace as well as your log.");
		break;
	case SIGPIPE:
		sprintf(tmp, "SIGPIPE");
		strcpy(tmp2, "Pipe was broken");
		break;
	case SIGABRT:
		sprintf(tmp, "SIGABRT");
		sprintf(tmp2,
				"Abort - probably failed assertion. I'm sleeping for a few seconds so you can read the message.");
		break;
	default:
		sprintf(tmp, "(Unknown)");
	}

	strcat(tmp, " signal received from OS");
	log_to_screen(tmp);
	log_to_screen(tmp2);
	if (sig == SIGABRT) {
		sleep(10);
	}
	kill_buffer();
	fatal_error
		("Mondoarchive is terminating in response to a signal from the OS");
	finish(254);				// just in case
}
Beispiel #2
0
void mainloop(void)
{
	buffer raw,rgb;
	init_buffer(&rgb,CAM_WIDTH*CAM_HEIGHT*3);
	int ok = start_showing(&rgb,"SDL buffer");
	if(ok==-1)
		fprintf(stderr,"EVERYTHING IS F****D\n");

	for(;;)
	{	
		raw = get_frame(3);
		yuy2_to_rgb(&raw,&rgb);
		render();	
	}

	kill_buffer(&rgb);
}