dix: only allocate unused classes for master devices
Slave devices don't need these and the matching code in CloseDevice() has a IsMaster() condition on freeing these, causing a leak. ==16111== 384 bytes in 4 blocks are definitely lost in loss record 72 of 105 ==16111== at 0x4C28BB4: calloc (vg_replace_malloc.c:467) ==16111== by 0x42AEE2: AllocDevicePair (devices.c:2707) ==16111== by 0x4BAA27: AllocXTestDevice (xtest.c:617) ==16111== by 0x4BA89A: InitXTestDevices (xtest.c:570) ==16111== by 0x425F5E: InitCoreDevices (devices.c:690) ==16111== by 0x5ACB2D: main (main.c:257) Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net> Reviewed-by: Chase Douglas <chase.douglas@canonical.com>
This commit is contained in:
parent
98b94c36d6
commit
27356a45b4
|
@ -2766,9 +2766,10 @@ AllocDevicePair(ClientPtr client, const char *name,
|
|||
keyboard->type = (master) ? MASTER_KEYBOARD : SLAVE;
|
||||
|
||||
/* The ClassesRec stores the device classes currently not used. */
|
||||
pointer->unused_classes = calloc(1, sizeof(ClassesRec));
|
||||
|
||||
keyboard->unused_classes = calloc(1, sizeof(ClassesRec));
|
||||
if (IsMaster(pointer)) {
|
||||
pointer->unused_classes = calloc(1, sizeof(ClassesRec));
|
||||
keyboard->unused_classes = calloc(1, sizeof(ClassesRec));
|
||||
}
|
||||
|
||||
*ptr = pointer;
|
||||
|
||||
|
|
Loading…
Reference in New Issue
Block a user