static void on_disconnect(netc_t *netc) { jlog(L_DEBUG, "disconnect"); struct session *session = NULL; struct mac_list *mac_itr = NULL; session = netc->ext_ptr; if (session == NULL) { return; } if (session->state == SESSION_STATE_NOT_AUTHED) { session_free(session); return; } /* If the context is still valid, update the node in it. */ if (session->context != NULL) { linkst_disjoin(session->context->linkst, session->id); while (session->mac_list != NULL) { mac_itr = session->mac_list; session->mac_list = mac_itr->next; ftable_erase(session->context->ftable, mac_itr->mac_addr); free(mac_itr); } ctable_erase(session->context->ctable, session->node_info->uuid); context_del_session(session->context, session); } transmit_node_connectinfo(ConnectState_disconnected, session->ip, session->cert_name); session_free(session); return; }
int main() { int init_matrix_size = 1; linkst_t *linkst = NULL; /* there is 4 active nodee */ int idx_a, idx_b, idx_c, idx_d; idx_a = 1; idx_b = 2; idx_c = 3; idx_d = 100; linkst = linkst_new(100, 3); linkst_join(linkst, idx_a, idx_b); if (linkst_joined(linkst, idx_a, idx_b) != 1) { printf("%d // %d\n", idx_a, idx_b); goto out; } linkst_join(linkst, idx_a, idx_d); if (linkst_joined(linkst, idx_a, idx_d) != 1) { printf("%d // %d\n", idx_a, idx_d); goto out; } int state; int i = 4; while (i--) { state = linkst_joined(linkst, idx_a, idx_b); printf("state [%d] || [%d] %s [%d]\n", state, idx_a, state == 1 ? "<==>": "//", idx_b); state = linkst_joined(linkst, idx_a, idx_c); printf("state [%d] || [%d] %s [%d]\n", state, idx_a, state == 1 ? "<==>": "//", idx_c); printf("\n\n"); sleep(1); } printf("out of loop\n"); linkst_join(linkst, idx_a, idx_b); linkst_join(linkst, idx_a, idx_d); linkst_disjoin(linkst, idx_a); state = linkst_joined(linkst, idx_a, idx_b); printf("state [%d] || [%d] %s [%d]\n", state, idx_a, state == 1 ? "<==>": "//", idx_b); state = linkst_joined(linkst, idx_a, idx_c); printf("state [%d] || [%d] %s [%d]\n", state, idx_a, state == 1 ? "<==>": "//", idx_c); printf("\n\n"); out: linkst_free(linkst); }