static void _sig_handler(int signo){ int shm_segnum; char shm_segid[SEGID_LEN]; if (signo == SIGINT || signo == SIGTERM){ fprintf(stderr, "Received KILL signal\n"); /* Free the queue */ pthread_mutex_lock(&sq_mtx); steque_destroy(&shm_segnum_queue); pthread_mutex_unlock(&sq_mtx); /* Clean up mutex and condition variables */ // pthread_mutex_destroy(&sq_mtx); // pthread_cond_destroy(&sq_notempty); /* Remove shared memory segments */ for (shm_segnum = 0; shm_segnum < shm_segcount; shm_segnum++) { /* Unlink shared memory ids and mark them for deletion */ sprintf(shm_segid, "/%d", shm_segnum); shm_unlink(shm_segid); fprintf(stderr, "[_sig_handler] Terminated shm_segid %s\n", shm_segid); } /* Close and unlink message queue */ close(mqd); mq_unlink(mq_name); fprintf(stderr, "[_sig_handler] Terminated message queue %s\n", mq_name); gfserver_stop(&gfs); exit(signo); } }
static void _sig_handler(int signo){ struct shm_info *shm_blk; if (signo == SIGINT || signo == SIGTERM){ gfserver_stop(&gfs); pthread_mutex_lock(&segfds_q_mutex); while (!steque_isempty(&segfds_q)) { shm_blk = (struct shm_info *)steque_pop(&segfds_q); if (shm_unlink(shm_blk->mem_name) == 0) { fprintf(stdout, "Shared mem %s removed from system.\n", shm_blk->mem_name); } if (sem_unlink(shm_blk->sem1_name) == 0) { fprintf(stdout, "Semaphore %s removed from system.\n", shm_blk->sem1_name); } if (sem_unlink(shm_blk->sem2_name) == 0) { fprintf(stdout, "Semaphore %s removed from system.\n", shm_blk->sem1_name); } } pthread_mutex_unlock(&segfds_q_mutex); pthread_cond_destroy(&segfds_q_cond); pthread_mutex_destroy(&segfds_q_mutex); exit(signo); } }
static void _sig_handler(int signo) { if (signo == SIGINT || signo == SIGTERM) { gfserver_stop(&gfs); CleanupSynchronizationQueues(); CleanupSharedSegmentPool(); exit(signo); } }
static void _sig_handler(int signo){ if (signo == SIGINT || signo == SIGTERM){ gfserver_stop(&gfs); exit(signo); } }