device.c: Make sr_*_inst_free() tolerant to NULL parameters
authorAlexandru Gagniuc <mr.nuke.me@gmail.com>
Thu, 3 Jan 2013 03:20:11 +0000 (21:20 -0600)
committerAlexandru Gagniuc <mr.nuke.me@gmail.com>
Tue, 8 Jan 2013 06:26:03 +0000 (00:26 -0600)
commit38772b2eec6e7a0226dda5eea93cb0c08ab68259
tree4c09b2973cc30b6b1c54563c0c94efe55a502883
parentcbc80f8f8afe28ff825449deffcc5aca7b51d7b8
device.c: Make sr_*_inst_free() tolerant to NULL parameters

g_free() is already tolerant to NULL pointers. If any sigrok internal free
function is passed a partially initialized structure (i.e. some fields are
null), it will safely free it. However, if the struct pointer itself is NULL, it
will dereference it, creating a segmentation fault.

Check for NULL pointers in all *_free() functions in device.c. This makes them
tolerant to NULL pointers, and more closely mimics the behavior of g_free().

Unavoidably, this patch also contains a memory leak fix for sr_dev_inst_free().
The sr_probe structures in sdi->probes were freed, but the GSList structure
itself was not freed ("definitely lost" memory leak).

Tested with Radioshack 22-812 connected to /dev/ttyUSB10:
$ G_SLICE=always-malloc G_DEBUG=gc-friendly valgrind --leak-check=full \
sigrok-cli --driver=radioshack-22-812:conn=/dev/ttyUSB10 --continuous -O analog

Signed-off-by: Alexandru Gagniuc <mr.nuke.me@gmail.com>
device.c