|
diff --git a/ot_http.c b/ot_http.c index 5c622e2..a87a02e 100644 --- a/ ot_http.c+++ b/ ot_http.c |
@@ -32,7 +32,7 @@ |
32 | #include "trackerlogic.h" |
32 | #include "trackerlogic.h" |
33 | |
33 | |
34 | #ifdef WANT_NO_AUTO_FREE |
34 | #ifdef WANT_NO_AUTO_FREE |
35 | #define OT_IOB_INIT(B) bzero(B, sizeof(io_batch)) |
35 | #define OT_IOB_INIT(B) (bzero(B, sizeof(io_batch)), 0) |
36 | #else |
36 | #else |
37 | #define OT_IOB_INIT(B) iob_init_autofree(B, 0) |
37 | #define OT_IOB_INIT(B) iob_init_autofree(B, 0) |
38 | #endif |
38 | #endif |
@@ -88,7 +88,15 @@ static void http_senddata(const int64 sock, struct ot_workstruct *ws) { |
88 | memcpy(outbuf, ws->reply + written_size, ws->reply_size - written_size); |
88 | memcpy(outbuf, ws->reply + written_size, ws->reply_size - written_size); |
89 | if (!cookie->batch) { |
89 | if (!cookie->batch) { |
90 | cookie->batch = malloc(sizeof(io_batch)); |
90 | cookie->batch = malloc(sizeof(io_batch)); |
91 | OT_IOB_INIT(cookie->batch); |
91 | if (!cookie->batch || OT_IOB_INIT(cookie->batch) == -1) { |
| |
92 | free(cookie->batch); |
| |
93 | free(outbuf); |
| |
94 | array_reset(&cookie->request); |
| |
95 | free(cookie); |
| |
96 | io_close(sock); |
| |
97 | return; |
| |
98 | } |
| |
99 | |
92 | cookie->batches = 1; |
100 | cookie->batches = 1; |
93 | } |
101 | } |
94 | |
102 | |
@@ -183,12 +191,12 @@ ssize_t http_sendiovecdata(const int64 sock, struct ot_workstruct *ws, int iovec |
183 | |
191 | |
184 | if (!cookie->batch) { |
192 | if (!cookie->batch) { |
185 | cookie->batch = malloc(sizeof(io_batch)); |
193 | cookie->batch = malloc(sizeof(io_batch)); |
186 | if (!cookie->batch) { |
194 | if (!cookie->batch || OT_IOB_INIT(cookie->batch) == -1) { |
| |
195 | free(cookie->batch); |
187 | free(header); |
196 | free(header); |
188 | iovec_free(&iovec_entries, &iovector); |
197 | iovec_free(&iovec_entries, &iovector); |
189 | HTTPERROR_500; |
198 | HTTPERROR_500; |
190 | } |
199 | } |
191 | OT_IOB_INIT(cookie->batch); |
| |
192 | cookie->batches = 1; |
200 | cookie->batches = 1; |
193 | } |
201 | } |
194 | current = cookie->batch + cookie->batches - 1; |
202 | current = cookie->batch + cookie->batches - 1; |
@@ -201,8 +209,8 @@ ssize_t http_sendiovecdata(const int64 sock, struct ot_workstruct *ws, int iovec |
201 | io_batch *new_batch = realloc(cookie->batch, (cookie->batches + 1) * sizeof(io_batch)); |
209 | io_batch *new_batch = realloc(cookie->batch, (cookie->batches + 1) * sizeof(io_batch)); |
202 | if (new_batch) { |
210 | if (new_batch) { |
203 | cookie->batch = new_batch; |
211 | cookie->batch = new_batch; |
204 | current = cookie->batch + cookie->batches++; |
212 | if (OT_IOB_INIT(current) != -1) |
205 | OT_IOB_INIT(current); |
213 | current = cookie->batch + cookie->batches++; |
206 | } |
214 | } |
207 | } |
215 | } |
208 | iob_addbuf_free(current, iovector[i].iov_base, iovector[i].iov_len); |
216 | iob_addbuf_free(current, iovector[i].iov_base, iovector[i].iov_len); |
|