} \
} while (0)
-#define CGI_PutStr(state, buf, len) do { \
- FCGX_PutStr(buf, len, state->fcgx->out); \
- if (state->header_ended) \
- state->bytes_sent += len; \
-} while (0)
+extern int CGI_PutStr(struct req_state *state, const char *buf, uint64_t len);
#define CGI_GetStr(state, buf, buf_len, olen) do { \
olen = FCGX_GetStr(buf, buf_len, state->fcgx->in); \
perfcounter->finc(l_rgw_get_lat,
(ceph_clock_now(s->cct) - start_time));
- send_response(bl);
+ ret = send_response(bl);
bl.clear();
+ if (ret < 0) {
+ dout(0) << "NOTICE: failed to send response to client" << dendl;
+ goto done;
+ }
+
start_time = ceph_clock_now(s->cct);
}
delete op;
}
+int CGI_PutStr(struct req_state *state, const char *buf, uint64_t len)
+{
+ int r = FCGX_PutStr(buf, len, state->fcgx->out);
+ if (r < 0)
+ return r;
+
+ if (state->header_ended)
+ state->bytes_sent += len;
+
+ return 0;
+}
+
send_data:
if (get_data && !orig_ret) {
- CGI_PutStr(s, bl.c_str(), len);
+ int r = CGI_PutStr(s, bl.c_str(), len);
+ if (r < 0)
+ return r;
}
return 0;
send_data:
if (get_data && !orig_ret) {
- CGI_PutStr(s, bl.c_str(), len);
+ int r = CGI_PutStr(s, bl.c_str(), len);
+ if (r < 0)
+ return r;
}
flush_formatter_to_req_state(s, s->formatter);