/* we don't risk keeping ports unusable if we found the
* zero from the other side.
*/
+ BUG_ON(c->flags & CO_FL_FDLESS);
HA_ATOMIC_AND(&fdtab[c->handle.fd].state, ~FD_LINGER_RISK);
}
}
/* don't perform a clean shutdown if we're going to reset or
* if the shutr was already received.
*/
+ BUG_ON(c->flags & CO_FL_FDLESS);
if (!(c->flags & CO_FL_SOCK_RD_SH) && clean)
shutdown(c->handle.fd, SHUT_WR);
}
if (!conn_ctrl_ready(conn))
return 0;
+ BUG_ON(conn->flags & CO_FL_FDLESS);
+
if (getsockopt(conn->handle.fd, SOL_SOCKET, SO_ERROR, &skerr, &lskerr) == 0)
errno = skerr;
if (!conn_ctrl_ready(conn))
goto fail;
+ BUG_ON(conn->flags & CO_FL_FDLESS);
+
if (!fd_recv_ready(conn->handle.fd))
goto not_ready;
if (!conn_ctrl_ready(conn))
goto fail;
+ BUG_ON(conn->flags & CO_FL_FDLESS);
+
if (!fd_recv_ready(conn->handle.fd))
goto not_ready;
if (!conn_ctrl_ready(conn))
goto fail;
+ BUG_ON(conn->flags & CO_FL_FDLESS);
+
if (!fd_recv_ready(conn->handle.fd))
goto not_ready;
if (!conn_ctrl_ready(conn))
return 0;
+ BUG_ON(conn->flags & CO_FL_FDLESS);
+
if (!fd_recv_ready(conn->handle.fd))
return 0;
if (!conn_ctrl_ready(conn))
return 0;
+ BUG_ON(conn->flags & CO_FL_FDLESS);
+
if (!fd_send_ready(conn->handle.fd))
return 0;
if (!conn_ctrl_ready(conn))
return 0;
+ BUG_ON(conn->flags & CO_FL_FDLESS);
+
if (!fd_recv_ready(conn->handle.fd))
return 0;
if (!conn_ctrl_ready(conn))
return 0;
+ BUG_ON(conn->flags & CO_FL_FDLESS);
+
if (!fd_send_ready(conn->handle.fd))
return 0;
*/
void sock_conn_ctrl_init(struct connection *conn)
{
+ BUG_ON(conn->flags & CO_FL_FDLESS);
fd_insert(conn->handle.fd, conn, sock_conn_iocb, tid_bit);
}
*/
void sock_conn_ctrl_close(struct connection *conn)
{
+ BUG_ON(conn->flags & CO_FL_FDLESS);
fd_delete(conn->handle.fd);
conn->handle.fd = DEAD_FD_MAGIC;
}
if (!(conn->flags & CO_FL_WAIT_L4_CONN))
return 1; /* strange we were called while ready */
+ BUG_ON(conn->flags & CO_FL_FDLESS);
+
if (!fd_send_ready(fd) && !(fdtab[fd].state & (FD_POLL_ERR|FD_POLL_HUP)))
return 0;
int fd = conn->handle.fd;
int len;
+ BUG_ON(conn->flags & CO_FL_FDLESS);
+
if (fdtab[fd].state & (FD_POLL_ERR|FD_POLL_HUP))
goto shut;
{
int ret = 0;
+ BUG_ON(conn->flags & CO_FL_FDLESS);
+
if (event_type & SUB_RETRY_RECV) {
if (fd_recv_ready(conn->handle.fd))
ret |= SUB_RETRY_RECV;
*/
void sock_ignore_events(struct connection *conn, int event_type)
{
+ BUG_ON(conn->flags & CO_FL_FDLESS);
+
if (event_type & SUB_RETRY_RECV)
fd_stop_recv(conn->handle.fd);
* the xprt layers should provide some status indicating their knowledge
* of shutdowns or error.
*/
+ BUG_ON(conn->flags & CO_FL_FDLESS);
+
skerr = 0;
lskerr = sizeof(skerr);
if ((getsockopt(conn->handle.fd, SOL_SOCKET, SO_ERROR, &skerr, &lskerr) < 0) ||