From 30662a3ca9bd6c81c051f09dea2d38e942cc2120 Mon Sep 17 00:00:00 2001 From: yuangongji Date: Sat, 29 Feb 2020 17:47:47 +0800 Subject: [PATCH] increase segment refcnt only if evbuffer_add_file_segment() succeeds (cherry picked from commit 114b3836755f1e526e658b248464465136bd87b8) --- buffer.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/buffer.c b/buffer.c index d5f89861..31617ec8 100644 --- a/buffer.c +++ b/buffer.c @@ -3209,7 +3209,6 @@ evbuffer_add_file_segment(struct evbuffer *buf, } } } - ++seg->refcnt; EVLOCK_UNLOCK(seg->lock, 0); if (buf->freeze_end) @@ -3273,6 +3272,9 @@ evbuffer_add_file_segment(struct evbuffer *buf, chain->off = length; } + EVLOCK_LOCK(seg->lock, 0); + ++seg->refcnt; + EVLOCK_UNLOCK(seg->lock, 0); extra->segment = seg; buf->n_add_for_cb += length; evbuffer_chain_insert(buf, chain); @@ -3299,7 +3301,7 @@ evbuffer_add_file(struct evbuffer *buf, int fd, ev_off_t offset, ev_off_t length if (!seg) return -1; r = evbuffer_add_file_segment(buf, seg, 0, length); - if (r == -1) + if (r == 0) evbuffer_file_segment_free(seg); return r; }