[MINOR] slightly rebalance stats_dump_{raw,http}
Both should process the response buffer equally. They now both
clear the hijack bit once done, and both receive a pointer to
the response buffer in their arguments.
diff --git a/include/proto/dumpstats.h b/include/proto/dumpstats.h
index bc6bdad..8fd3ccb 100644
--- a/include/proto/dumpstats.h
+++ b/include/proto/dumpstats.h
@@ -44,9 +44,9 @@
#define STATS_ST_REP 2
#define STATS_ST_CLOSE 3
-int stats_dump_raw(struct session *s, struct uri_auth *uri);
+int stats_dump_raw(struct session *s, struct buffer *rep, struct uri_auth *uri);
void stats_dump_raw_to_buffer(struct session *s, struct buffer *req);
-int stats_dump_http(struct session *s, struct uri_auth *uri);
+int stats_dump_http(struct session *s, struct buffer *rep, struct uri_auth *uri);
int stats_dump_proxy(struct session *s, struct proxy *px, struct uri_auth *uri);
diff --git a/src/dumpstats.c b/src/dumpstats.c
index 590edbe..30cb0ed 100644
--- a/src/dumpstats.c
+++ b/src/dumpstats.c
@@ -182,10 +182,10 @@
* <uri>. s->data_ctx must have been zeroed first, and the flags properly set.
* It returns 0 if it had to stop writing data and an I/O is needed, 1 if the
* dump is finished and the session must be closed, or -1 in case of any error.
+ * It automatically clears the HIJACK bit from the response buffer.
*/
-int stats_dump_raw(struct session *s, struct uri_auth *uri)
+int stats_dump_raw(struct session *s, struct buffer *rep, struct uri_auth *uri)
{
- struct buffer *rep = s->rep;
struct proxy *px;
struct chunk msg;
unsigned int up;
@@ -276,13 +276,15 @@
case DATA_ST_END:
s->data_state = DATA_ST_FIN;
- return 1;
+ /* fall through */
case DATA_ST_FIN:
+ buffer_stop_hijack(rep);
return 1;
default:
/* unknown state ! */
+ buffer_stop_hijack(rep);
return -1;
}
}
@@ -292,15 +294,13 @@
* calls stats_dump_raw(), and releases the buffer's hijack bit when the dump
* is finished.
*/
-void stats_dump_raw_to_buffer(struct session *s, struct buffer *req)
+void stats_dump_raw_to_buffer(struct session *s, struct buffer *rep)
{
if (s->ana_state != STATS_ST_REP)
return;
- if (stats_dump_raw(s, NULL) != 0) {
- buffer_stop_hijack(s->rep);
+ if (stats_dump_raw(s, rep, NULL) != 0)
s->ana_state = STATS_ST_CLOSE;
- }
return;
}
@@ -315,9 +315,8 @@
* 1 if the dump is finished and the session must be closed, or -1 in case of
* any error.
*/
-int stats_dump_http(struct session *s, struct uri_auth *uri)
+int stats_dump_http(struct session *s, struct buffer *rep, struct uri_auth *uri)
{
- struct buffer *rep = s->rep;
struct proxy *px;
struct chunk msg;
unsigned int up;
diff --git a/src/proto_http.c b/src/proto_http.c
index 092c730..f931da4 100644
--- a/src/proto_http.c
+++ b/src/proto_http.c
@@ -2999,7 +2999,7 @@
}
else if (s->data_source == DATA_SRC_STATS) {
/* dump server statistics */
- int ret = stats_dump_http(s, s->be->uri_auth);
+ int ret = stats_dump_http(s, rep, s->be->uri_auth);
if (ret >= 0)
return;
/* -1 indicates an error */