Example #1
0
YKSEM* YKSemCreate(int initialValue) {
	YKSEM* newSemaphore;

	newSemaphore = getNewSem();
	if (newSemaphore == null) exit(NEW_SEM_FAILED);

	initializePriorityQueue(&(newSemaphore->queue));
	newSemaphore->value = initialValue;

	return newSemaphore;

}
Example #2
0
YKQ* YKQCreate(void** start, unsigned size) {

	YKQ* newMessageQueue;

	newMessageQueue = getNewQueue();
	if (newMessageQueue == null) exit(NEW_QUEUE_FAILED);

	initializePriorityQueue(&(newMessageQueue->queue));
	newMessageQueue->messages = start;
	newMessageQueue->maxSize = size;
	newMessageQueue->currentSize = 0;

	return newMessageQueue;

}
Example #3
0
void YKInitialize(void) {

	YKEnterMutex();

	//Set up queues
	initializePriorityQueue(&readyQueue);
	initializeDelayQueue();

	//Set up Task Block
	taskBlock.nextFreeTCB == 0;
	//
		
	//Set up Idle Task
	YKNewTask(YKIdleTask, &idleTaskStack[IDLETASKSTACKSIZE], 100);
	//

	YKExitMutex();
	return;

}
Example #4
0
int main(int argc, char **argv)
{
	int port = SERVER_PORT;
	timeout = 60;
	static int daemon_mode = 0;

	int c;
	while (1) {
		static struct option long_options[] = {
			{"daemon",  no_argument,       &daemon_mode, 1},
			{"file",      required_argument, 0, 'f'},
			{"port",    required_argument, 0, 'p'},
			{"sync",    required_argument, 0, 's'},
			{0, 0, 0, 0}
		};
		int option_index = 0;
		c = getopt_long(argc, argv, "f:p:s:", long_options, &option_index);
		if (c == -1) { break; }
		switch (c) {
			case 0:
				if (long_options[option_index].flag != 0) { break; }
				printf ("option %s", long_options[option_index].name);
				if (optarg) { printf(" with arg %s", optarg); }
				printf("\n");
				break;
			case 'f':
				sync_file = optarg;
				break;
			case 'p':
				port = atoi(optarg);
				break;
			case 's':
				timeout = atoi(optarg);
				break;
			case '?':
				/* getopt_long already printed an error message. */
				break;
			default:
				abort();
		}
	}
	if (daemon_mode == 1) {
		daemonize();
	}
	if (sync_file == NULL) {
		sync_file = "barbershop.snapshot";
	}

	// side snapshot file to hot load a snapshot by sending SIGHUP
	int n = strlen(sync_file);
	load_file = malloc(sizeof(char) * (n + 6));
	sprintf(load_file, "%s.load", sync_file);

	initializePriorityQueue();

	time(&app_stats.started_at);
	app_stats.version = "00.02.01";
	app_stats.updates = 0;
	app_stats.items = 0;
	app_stats.pools = 0;
	
	load_snapshot(sync_file);
	signal(SIGCHLD, SIG_IGN);
	signal(SIGPIPE, SIG_IGN);
	signal(SIGTSTP, SIG_IGN);
	signal(SIGTTOU, SIG_IGN);
	signal(SIGTTIN, SIG_IGN);
	signal(SIGHUP, signal_handler); /* catch hangup signal */
	signal(SIGTERM, signal_handler); /* catch kill signal */
	
	pthread_t garbage_collector;
	pthread_create(&garbage_collector, NULL, (void *) gc_thread, NULL);

	int listen_fd;
	struct sockaddr_in listen_addr;
	int reuseaddr_on = 1;
	struct event ev_accept;
	event_init();
	listen_fd = socket(AF_INET, SOCK_STREAM, 0);
	if (listen_fd < 0) { err(1, "listen failed"); }
	if (setsockopt(listen_fd, SOL_SOCKET, SO_REUSEADDR, &reuseaddr_on, sizeof(reuseaddr_on)) == -1) { err(1, "setsockopt failed"); }
	memset(&listen_addr, 0, sizeof(listen_addr));
	listen_addr.sin_family = AF_INET;
	listen_addr.sin_addr.s_addr = INADDR_ANY;
	listen_addr.sin_port = htons(port);
	if (bind(listen_fd, (struct sockaddr *)&listen_addr, sizeof(listen_addr)) < 0) { err(1, "bind failed"); }
	if (listen(listen_fd, 5) < 0) { err(1, "listen failed"); }
	if (setnonblock(listen_fd) < 0) { err(1, "failed to set server socket to non-blocking"); }
	event_set(&ev_accept, listen_fd, EV_READ|EV_PERSIST, on_accept, NULL);
	event_add(&ev_accept, NULL);
	event_dispatch();

	return 0;
}