YKSEM* YKSemCreate(int initialValue) { YKSEM* newSemaphore; newSemaphore = getNewSem(); if (newSemaphore == null) exit(NEW_SEM_FAILED); initializePriorityQueue(&(newSemaphore->queue)); newSemaphore->value = initialValue; return newSemaphore; }
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; }
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; }
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; }