diff --git a/include/haproxy/shctx.h b/include/haproxy/shctx.h index c9715aa1e..8b1e56069 100644 --- a/include/haproxy/shctx.h +++ b/include/haproxy/shctx.h @@ -27,7 +27,7 @@ struct shared_block *shctx_row_reserve_hot(struct shared_context *shctx, void shctx_row_inc_hot(struct shared_context *shctx, struct shared_block *first); void shctx_row_dec_hot(struct shared_context *shctx, struct shared_block *first); int shctx_row_data_append(struct shared_context *shctx, - struct shared_block *first, struct shared_block *from, + struct shared_block *first, unsigned char *data, int len); int shctx_row_data_get(struct shared_context *shctx, struct shared_block *first, unsigned char *dst, int offset, int len); diff --git a/src/cache.c b/src/cache.c index eab3f9752..93275f59d 100644 --- a/src/cache.c +++ b/src/cache.c @@ -682,7 +682,7 @@ cache_store_http_payload(struct stream *s, struct filter *filter, struct http_ms } shctx_unlock(shctx); - ret = shctx_row_data_append(shctx, st->first_block, st->first_block->last_append, + ret = shctx_row_data_append(shctx, st->first_block, (unsigned char *)b_head(&trash), b_data(&trash)); if (ret < 0) goto no_cache; @@ -1240,7 +1240,7 @@ enum act_return http_action_store_cache(struct act_rule *rule, struct proxy *px, */ /* does not need to be locked because it's in the "hot" list, * copy the headers */ - if (shctx_row_data_append(shctx, first, NULL, (unsigned char *)trash.area, trash.data) < 0) + if (shctx_row_data_append(shctx, first, (unsigned char *)trash.area, trash.data) < 0) goto out; /* register the buffer in the filter ctx for filling it with data*/ diff --git a/src/shctx.c b/src/shctx.c index 604c343a9..dd45ad217 100644 --- a/src/shctx.c +++ b/src/shctx.c @@ -167,8 +167,7 @@ void shctx_row_dec_hot(struct shared_context *shctx, struct shared_block *first) * Return the amount of appended data if ret >= 0 * or how much more space it needs to contains the data if < 0. */ -int shctx_row_data_append(struct shared_context *shctx, - struct shared_block *first, struct shared_block *from, +int shctx_row_data_append(struct shared_context *shctx, struct shared_block *first, unsigned char *data, int len) { int remain, start; @@ -178,7 +177,7 @@ int shctx_row_data_append(struct shared_context *shctx, if (len > first->block_count * shctx->block_size - first->len) return (first->block_count * shctx->block_size - first->len) - len; - block = from ? from : first; + block = first->last_append ? first->last_append : first; list_for_each_entry_from(block, &shctx->hot, list) { /* end of copy */ if (len <= 0) diff --git a/src/ssl_sock.c b/src/ssl_sock.c index d025d6eae..2334b86db 100644 --- a/src/ssl_sock.c +++ b/src/ssl_sock.c @@ -4260,7 +4260,7 @@ static int sh_ssl_sess_store(unsigned char *s_id, unsigned char *data, int data_ first->len = sizeof(struct sh_ssl_sess_hdr); } - if (shctx_row_data_append(ssl_shctx, first, NULL, data, data_len) < 0) { + if (shctx_row_data_append(ssl_shctx, first, data, data_len) < 0) { shctx_row_dec_hot(ssl_shctx, first); return 0; }