提交 9b991d02 编写于 作者: M Michal Privoznik

virStreamSparseSendAll: Reset @want in each iteration

There's a slight problem with the current function. Assume we are
currently in a data section and we have say 42 bytes until next
section. Therefore, just before (handler) is called to fill up
the buffer with data, @want is changed to 42 to match the amount
of data left in the current section. However, after hole is
processed, we are back in data section but with incredibly small
@want size. Nobody will ever reset it back. This results in
incredible data fragmentation.
Signed-off-by: NMichal Privoznik <mprivozn@redhat.com>
上级 f9fe0f54
......@@ -698,7 +698,7 @@ int virStreamSparseSendAll(virStreamPtr stream,
void *opaque)
{
char *bytes = NULL;
size_t want = VIR_NET_MESSAGE_LEGACY_PAYLOAD_MAX;
size_t bufLen = VIR_NET_MESSAGE_LEGACY_PAYLOAD_MAX;
int ret = -1;
unsigned long long dataLen = 0;
......@@ -718,12 +718,13 @@ int virStreamSparseSendAll(virStreamPtr stream,
goto cleanup;
}
if (VIR_ALLOC_N(bytes, want) < 0)
if (VIR_ALLOC_N(bytes, bufLen) < 0)
goto cleanup;
for (;;) {
int inData, got, offset = 0;
long long sectionLen;
size_t want = bufLen;
const unsigned int skipFlags = 0;
if (!dataLen) {
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册