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); }
GLT_func_prefix int glt_mutex_trylock(GLT_mutex mutex) { return ABT_mutex_trylock(mutex); }