mirror of
https://github.com/cuberite/libevent.git
synced 2025-08-04 01:36:23 -04:00
increase segment refcnt only if evbuffer_add_file_segment() succeeds
(cherry picked from commit 114b3836755f1e526e658b248464465136bd87b8)
This commit is contained in:
parent
6f8e0e97e5
commit
30662a3ca9
6
buffer.c
6
buffer.c
@ -3209,7 +3209,6 @@ evbuffer_add_file_segment(struct evbuffer *buf,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
++seg->refcnt;
|
|
||||||
EVLOCK_UNLOCK(seg->lock, 0);
|
EVLOCK_UNLOCK(seg->lock, 0);
|
||||||
|
|
||||||
if (buf->freeze_end)
|
if (buf->freeze_end)
|
||||||
@ -3273,6 +3272,9 @@ evbuffer_add_file_segment(struct evbuffer *buf,
|
|||||||
chain->off = length;
|
chain->off = length;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
EVLOCK_LOCK(seg->lock, 0);
|
||||||
|
++seg->refcnt;
|
||||||
|
EVLOCK_UNLOCK(seg->lock, 0);
|
||||||
extra->segment = seg;
|
extra->segment = seg;
|
||||||
buf->n_add_for_cb += length;
|
buf->n_add_for_cb += length;
|
||||||
evbuffer_chain_insert(buf, chain);
|
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)
|
if (!seg)
|
||||||
return -1;
|
return -1;
|
||||||
r = evbuffer_add_file_segment(buf, seg, 0, length);
|
r = evbuffer_add_file_segment(buf, seg, 0, length);
|
||||||
if (r == -1)
|
if (r == 0)
|
||||||
evbuffer_file_segment_free(seg);
|
evbuffer_file_segment_free(seg);
|
||||||
return r;
|
return r;
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user