Пример #1
0
static void abt_check_events(int idx)
{
    int n, ret;
    char recv_buf[RECV_BUF_LEN];

    if (!abt_alive) return;

    ret = ABT_mutex_trylock(g_mutex);
    if (ret == ABT_ERR_MUTEX_LOCKED) return;
    assert(ret == ABT_SUCCESS);

    ret = poll(&abt_pfd, 1, 1);
    if (ret == -1) {
        handle_error("ERROR: poll");
    } else if (ret != 0) {
        if (abt_pfd.revents & POLLIN) {
            bzero(recv_buf, RECV_BUF_LEN);
            n = read(abt_pfd.fd, recv_buf, RECV_BUF_LEN);
            if (n < 0) handle_error("ERROR: read");

            printf("\nES%d: received request '%c'\n", idx, recv_buf[0]);
            switch (recv_buf[0]) {
                case 'd': decrease_xstream(); break;
                case 'i': increase_xstream(); break;
                case 'n': send_num_xstream(); break;
                case 'q': abt_disconnect(); break;
                default:
                    printf("Unknown commend: %s\n", recv_buf);
                    break;
            }
        }

        if (abt_pfd.revents & POLLRDHUP) {
            abt_alive = 0;
            printf("Server disconnected...\n");
        }
        abt_pfd.revents = 0;
    }

    ABT_mutex_unlock(g_mutex);
}
Пример #2
0
GLT_func_prefix int glt_mutex_trylock(GLT_mutex mutex) {
    return ABT_mutex_trylock(mutex);
}