void Connection_task(void *v) { Connection *conn = (Connection *)v; int i = 0; int next = OPEN; State_init(&conn->state, &CONN_ACTIONS); while(1) { if(Filter_activated()) { next = Filter_run(next, conn); check(next >= CLOSE && next < EVENT_END, "!!! Invalid next event[%d]: %d from filter!", i, next); } if(next == CLOSE) break; next = State_exec(&conn->state, next, (void *)conn); check(next >= CLOSE && next < EVENT_END, "!!! Invalid next event[%d]: %d, Tell ZED!", i, next); if(conn->iob && !conn->iob->closed) { Register_ping(IOBuf_fd(conn->iob)); } i++; } error: // fallthrough State_exec(&conn->state, CLOSE, (void *)conn); Connection_destroy(conn); taskexit(0); }
void Connection_task(void *v) { Connection *conn = (Connection *)v; int i = 0; int next = 0; State_init(&conn->state, &CONN_ACTIONS); for(i = 0, next = OPEN; next != CLOSE; i++) { next = State_exec(&conn->state, next, (void *)conn); check(next >= CLOSE && next < EVENT_END, "!!! Invalid next event[%d]: %d, Tell ZED!", i, next); } error: // fallthrough State_exec(&conn->state, CLOSE, (void *)conn); Connection_destroy(conn); return; }
/** * Runs a bunch of events on the given state, printing out the * results, and then returning whether it exited cleanly or not. */ int run_events(State *state, const char *name, int *events) { int i = 0; int rc = 0; State_init(state, &test_actions); debug(">>> RUNNING %s", name); for(i = 0; events[i] != 0; i++) { rc = State_exec(state, events[i], (void *)(intptr_t)i); check(State_invariant(state) != -1, "Failed on processing %d event.", events[i]); } debug("<<< FINAL RESULT: %d, finished: %d", rc, State_invariant(state)); return State_invariant(state); error: return 0; }