int
main(int argc, char **argv)
{
    server_args_t server_args;
    pthread_t server_thread;

    seed_random();

    burp_track = track_new(BURP_WAV);
    if (! burp_track) {
	perror(BURP_WAV);
	exit(1);
    }

    p = piface_new();

    pthread_mutex_init(&event_lock, NULL);
    server_args.port = 5555;
    server_args.command = remote_event;
    server_args.state = NULL;

    pthread_create(&server_thread, NULL, server_thread_main, &server_args);

    while(true) {
	wait_for_trigger();
	take_action();
	wait_for_trigger_release();
	if (n_consecutive_spits) {
	    wait_for_recharge();
	}
    }

    return 0;
}
Exemple #2
0
//
//the routine for deleting keys in pool
//
void* NVM_KV_Pool_Del_Manager::start_thread()
{
    pthread_mutex_t *glb_mtx = get_store()->get_pool_mgr()->get_glb_mutex();
    NVM_KV_Store* kv_store = get_store();
    NVM_KV_Pool_Mgr* pool_mgr = kv_store->get_pool_mgr();
    bool delete_all_pools = false;
    int ret_code = NVM_SUCCESS;

    set_cancel_state();
    //register function that needs to be called on thread cancellation
    pthread_cleanup_push(&NVM_KV_Scanner::scanner_cancel_routine, get_mutex());
    pthread_cleanup_push(&NVM_KV_Scanner::scanner_cancel_routine, glb_mtx);
    while (true)
    {

        //cancellation point
        pthread_testcancel();
        //check if the pool deletion map is empty, if not
        //return from the wait else start waiting for
        //external trigger
        pthread_mutex_lock(get_mutex());
        while (!pool_mgr->has_pools_to_delete())
        {
            wait_for_trigger();
        }
        //copy out the pool deletion bitmap to m_pools_to_delete bitmap for
        //processing. This operation is protected by pool bitmap mutex.
        pool_mgr->get_pool_deletion_bitmap(m_pools_to_delete, delete_all_pools);
        pthread_mutex_unlock(get_mutex());

        //to yield to pool deletion manager, pool deletion status is set right
        //away
        pool_mgr->set_pool_del_status(true);

        //acquire global lock to synchronize with expiry manager
        pthread_mutex_lock(glb_mtx);
        if ((ret_code = start_pool_delete(delete_all_pools)) != NVM_SUCCESS)
        {
            fprintf(stderr, "Pool deletion encounter error: %d\n", ret_code);
        }

        pool_mgr->set_pool_del_status(false);

        //trigger expiry thread
        if (get_store()->expiry_status())
        {
            get_store()->get_expiry_thread()->restart_scanner_if_asleep();
        }
        pthread_mutex_unlock(glb_mtx);
    }
    pthread_cleanup_pop(0);
    pthread_cleanup_pop(0);
    return NULL;
}