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 825df8c315 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
This commit is contained in:
Peter Krempa 2015-07-02 16:46:46 +02:00
parent 9777419c81
commit e8c5f61e91

View File

@ -498,9 +498,12 @@ virBitmapPtr virBitmapNewData(void *data, int len)
*/
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)
return -1;