void fwtcp_del(struct fwspec *fwspec) { struct fwtcp *fwtcp; struct fwtcp **pprev; for (pprev = &fwtcp_list; (fwtcp = *pprev) != NULL; pprev = &fwtcp->next) { if (fwspec_equal(&fwtcp->fwspec, fwspec)) { *pprev = fwtcp->next; fwtcp->next = NULL; break; } } if (fwtcp == NULL) { DPRINTF0(("%s: not found\n", __func__)); return; } DPRINTF0(("%s\n", __func__)); pollmgr_del_slot(fwtcp->pmhdl.slot); fwtcp->pmhdl.slot = -1; closesocket(fwtcp->sock); fwtcp->sock = -1; /* let pending msg_connect be processed before we delete fwtcp */ proxy_lwip_post(&fwtcp->msg_delete); }
/** * POLLMGR_CHAN_PXUDP_DEL handler. */ static int pxudp_pmgr_chan_del(struct pollmgr_handler *handler, SOCKET fd, int revents) { struct pxudp *pxudp; pxudp = pxudp_chan_recv_strong(handler, fd, revents); if (pxudp == NULL) { return POLLIN; } DPRINTF(("pxudp_del: pxudp %p; socket %d\n", (void *)pxudp, pxudp->sock)); pollmgr_del_slot(pxudp->pmhdl.slot); /* * Go back to lwip thread to delete after any pending callbacks * for unprocessed inbound traffic are drained. */ pxudp_schedule_delete(pxudp); return POLLIN; }