/** \brief Initialize a semaphore. * \param key Semaphore key to use. * \return The freshly allocated semaphore handle. */ static int ketama_sem_init( key_t key ) { if (sem_ids == NULL) { init_sem_id_tracker(); } int sem_set_id; sem_set_id = semget( key, 1, 0 ); track_sem_id(sem_set_id); if ( sem_set_id == -1 ) { // create a semaphore set with ID SEM_ID sem_set_id = semget( key, 1, IPC_CREAT | 0666 ); track_sem_id(sem_set_id); if ( sem_set_id == -1 ) { strcpy( k_error, "Could not open semaphore!" ); return 0; } ketama_sem_unlock( sem_set_id ); } return sem_set_id; }
/** \brief Initialize a semaphore. * \param key Semaphore key to use. * \return The freshly allocated semaphore handle. */ static int ketama_sem_init( key_t key ) { if (sem_ids == NULL) { init_sem_id_tracker(); syslog1( LOG_INFO, "Semaphore tracker initiated.\n" ); } int sem_set_id; sem_set_id = semget( key, 1, IPC_CREAT | 0666 ); if ( sem_set_id == -1 ) { snprintf( k_error, sizeof(k_error), "Ketama: Could not open semaphore!\n" ); syslog1( LOG_INFO, k_error ); return 0; } // track the semaphore if it exists track_sem_id(sem_set_id); return sem_set_id; }