CLEANUP: peers: remove a bit of spaghetti to prepare for the next bugfix

We'll need to centralize some pool_alloc()/pool_free() calls in the
upcoming fix so before that we need to reduce the number of points
by which we leave the critical code.
This commit is contained in:
Willy Tarreau 2013-04-11 16:14:13 +02:00
parent deaec2fda3
commit 72d6c16df4

View File

@ -600,14 +600,9 @@ static void peer_io_handler(struct stream_interface *si)
int totl = 0;
reql = bo_getblk(si->ob, (char *)&c, sizeof(c), totl);
if (reql <= 0) { /* closed or EOL not found */
if (reql == 0) {
/* nothing to read */
goto incomplete;
}
si->applet.st0 = PEER_SESSION_END;
goto switchstate;
}
if (reql <= 0) /* closed or EOL not found */
goto incomplete;
totl += reql;
if ((c & 0x80) || (c == 'D')) {
@ -625,13 +620,9 @@ static void peer_io_handler(struct stream_interface *si)
}
else {
reql = bo_getblk(si->ob, (char *)&netinteger, sizeof(netinteger), totl);
if (reql <= 0) { /* closed or EOL not found */
if (reql == 0) {
goto incomplete;
}
si->applet.st0 = PEER_SESSION_END;
goto switchstate;
}
if (reql <= 0) /* closed or EOL not found */
goto incomplete;
totl += reql;
pushack = ntohl(netinteger);
}
@ -642,24 +633,16 @@ static void peer_io_handler(struct stream_interface *si)
stkey.key = stkey.data.buf;
reql = bo_getblk(si->ob, (char *)&netinteger, sizeof(netinteger), totl);
if (reql <= 0) { /* closed or EOL not found */
if (reql == 0) {
goto incomplete;
}
si->applet.st0 = PEER_SESSION_END;
goto switchstate;
}
if (reql <= 0) /* closed or EOL not found */
goto incomplete;
totl += reql;
stkey.key_len = ntohl(netinteger);
reql = bo_getblk(si->ob, stkey.key, stkey.key_len, totl);
if (reql <= 0) { /* closed or EOL not found */
if (reql == 0) {
goto incomplete;
}
si->applet.st0 = PEER_SESSION_END;
goto switchstate;
}
if (reql <= 0) /* closed or EOL not found */
goto incomplete;
totl += reql;
}
else if (ps->table->table->type == STKTABLE_TYPE_INTEGER) {
@ -668,13 +651,9 @@ static void peer_io_handler(struct stream_interface *si)
stkey.key = &stkey.data.integer;
reql = bo_getblk(si->ob, (char *)&netinteger, sizeof(netinteger), totl);
if (reql <= 0) { /* closed or EOL not found */
if (reql == 0) {
goto incomplete;
}
si->applet.st0 = PEER_SESSION_END;
goto switchstate;
}
if (reql <= 0) /* closed or EOL not found */
goto incomplete;
totl += reql;
stkey.data.integer = ntohl(netinteger);
}
@ -684,26 +663,17 @@ static void peer_io_handler(struct stream_interface *si)
stkey.key = stkey.data.buf;
reql = bo_getblk(si->ob, (char *)&stkey.data.buf, ps->table->table->key_size, totl);
if (reql <= 0) { /* closed or EOL not found */
if (reql == 0) {
goto incomplete;
}
si->applet.st0 = PEER_SESSION_END;
goto switchstate;
}
totl += reql;
if (reql <= 0) /* closed or EOL not found */
goto incomplete;
totl += reql;
}
/* read server id */
reql = bo_getblk(si->ob, (char *)&netinteger, sizeof(netinteger), totl);
if (reql <= 0) { /* closed or EOL not found */
if (reql == 0) {
goto incomplete;
}
si->applet.st0 = PEER_SESSION_END;
goto switchstate;
}
if (reql <= 0) /* closed or EOL not found */
goto incomplete;
totl += reql;
srvid = ntohl(netinteger);
@ -806,13 +776,9 @@ static void peer_io_handler(struct stream_interface *si)
uint32_t netinteger;
reql = bo_getblk(si->ob, (char *)&netinteger, sizeof(netinteger), totl);
if (reql <= 0) { /* closed or EOL not found */
if (reql == 0) {
goto incomplete;
}
si->applet.st0 = PEER_SESSION_END;
goto switchstate;
}
if (reql <= 0) /* closed or EOL not found */
goto incomplete;
totl += reql;
/* Consider remote is up to date with "acked" version */
@ -828,8 +794,16 @@ static void peer_io_handler(struct stream_interface *si)
bo_skip(si->ob, totl);
/* loop on that state to peek next message */
continue;
goto switchstate;
incomplete:
/* we get here when a bo_getblk() returns <= 0 */
if (reql < 0) {
/* there was an error */
si->applet.st0 = PEER_SESSION_END;
goto switchstate;
}
/* Nothing to read, now we start to write */
/* Confirm finished or partial messages */