With the patch provided to remove the extra up_client_new() calls, I still see these 3 leaks from within up_client_get_devices().
Neither g_ptr_array_free() or g_ptr_array_unref() are cleaning them up. I'm assuming a more comprehensive fix would be to remove up_client_get_devices() from upower_read() since it seems to be internally leaking in libupower-glib and save the data from the call in upower_supported() for each polling cycle instead of discarding it each time. ==17098== ==17098== 5,968 bytes in 746 blocks are possibly lost in loss record 1,557 of 1,606 ==17098== at 0x4238A0E: g_type_create_instance (in /usr/lib/i386-linux-gnu/libgobject-2.0.so.0.4200.1) ==17098== by 0x421A9D5: g_object_new_internal (in /usr/lib/i386-linux-gnu/libgobject-2.0.so.0.4200.1) ==17098== by 0x421C4A5: g_object_newv (in /usr/lib/i386-linux-gnu/libgobject-2.0.so.0.4200.1) ==17098== by 0x421CACC: g_object_new (in /usr/lib/i386-linux-gnu/libgobject-2.0.so.0.4200.1) ==17098== by 0x41EDB06: up_device_new (in /usr/lib/i386-linux-gnu/libupower-glib.so.3.0.0) ==17098== by 0x41E8FC6: up_client_get_devices (in /usr/lib/i386-linux-gnu/libupower-glib.so.3.0.0) ==17098== by 0x804BE5A: upower_read (upower.c:89) ==17098== by 0x804A996: alarmhandler (wmbattery.c:711) ==17098== by 0x43BD3F7: ??? (in /lib/i386-linux-gnu/i686/cmov/libc-2.19.so) ==17098== ==17098== 14,920 bytes in 746 blocks are possibly lost in loss record 1,566 of 1,606 ==17098== at 0x42389C2: g_type_create_instance (in /usr/lib/i386-linux-gnu/libgobject-2.0.so.0.4200.1) ==17098== by 0x421A9D5: g_object_new_internal (in /usr/lib/i386-linux-gnu/libgobject-2.0.so.0.4200.1) ==17098== by 0x421C4A5: g_object_newv (in /usr/lib/i386-linux-gnu/libgobject-2.0.so.0.4200.1) ==17098== by 0x421CACC: g_object_new (in /usr/lib/i386-linux-gnu/libgobject-2.0.so.0.4200.1) ==17098== by 0x41EDB06: up_device_new (in /usr/lib/i386-linux-gnu/libupower-glib.so.3.0.0) ==17098== by 0x41E8FC6: up_client_get_devices (in /usr/lib/i386-linux-gnu/libupower-glib.so.3.0.0) ==17098== by 0x804BE5A: upower_read (upower.c:89) ==17098== by 0x804A996: alarmhandler (wmbattery.c:711) ==17098== by 0x43BD3F7: ??? (in /lib/i386-linux-gnu/i686/cmov/libc-2.19.so) ==17098== ==17098== 26,856 bytes in 746 blocks are possibly lost in loss record 1,584 of 1,606 ==17098== at 0x402C0D5: calloc (vg_replace_malloc.c:623) ==17098== by 0x42B3745: g_malloc0 (in /lib/i386-linux-gnu/libglib-2.0.so.0.4200.1) ==17098== by 0x42148C4: g_closure_new_simple (in /usr/lib/i386-linux-gnu/libgobject-2.0.so.0.4200.1) ==17098== by 0x4215C28: g_cclosure_new (in /usr/lib/i386-linux-gnu/libgobject-2.0.so.0.4200.1) ==17098== by 0x422DF1C: g_signal_connect_data (in /usr/lib/i386-linux-gnu/libgobject-2.0.so.0.4200.1) ==17098== by 0x41ECAB2: up_device_set_object_path_sync (in /usr/lib/i386-linux-gnu/libupower-glib.so.3.0.0) ==17098== by 0x41E8FD3: up_client_get_devices (in /usr/lib/i386-linux-gnu/libupower-glib.so.3.0.0) ==17098== by 0x804BE5A: upower_read (upower.c:89) ==17098== by 0x804A996: alarmhandler (wmbattery.c:711) ==17098== by 0x43BD3F7: ??? (in /lib/i386-linux-gnu/i686/cmov/libc-2.19.so) ==17098== -- David Johnson Principal Engineer