示例#1
0
文件: ketama.c 项目: 4399data/ketama
/** \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;
}
示例#2
0
文件: ketama.c 项目: wayfair/ketama
/** \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;
}