Example #1
0
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);
  }
}
Example #2
0
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);
  }
}
Example #3
0
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);
  }
}