提交 e8c5f61e 编写于 作者: P Peter Krempa

util: bitmap: Don't alloc overly large binary bitmaps

Optimize the virBitmap to array-of-char bitmap conversion by skipping
trailing zero bytes.

This also fixes a regression when requesting iothread information from a
live VM since after commit 825df8c3 the
bitmap returned from virProcessGetAffinity is too big to be formatted
properly via RPC. A user would get the following error:

error: Unable to get domain IOThreads information
error: Unable to encode message payload

Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1238589
上级 9777419c
...@@ -498,9 +498,12 @@ virBitmapPtr virBitmapNewData(void *data, int len) ...@@ -498,9 +498,12 @@ virBitmapPtr virBitmapNewData(void *data, int len)
*/ */
int virBitmapToData(virBitmapPtr bitmap, unsigned char **data, int *dataLen) int virBitmapToData(virBitmapPtr bitmap, unsigned char **data, int *dataLen)
{ {
int len; ssize_t len;
len = (bitmap->max_bit + CHAR_BIT - 1) / CHAR_BIT; if ((len = virBitmapLastSetBit(bitmap)) < 0)
len = 1;
else
len = (len + CHAR_BIT) / CHAR_BIT;
if (VIR_ALLOC_N(*data, len) < 0) if (VIR_ALLOC_N(*data, len) < 0)
return -1; return -1;
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册