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>
Fri, 1 Feb 2013 17:19:23 +0000 (11:19 -0600)
commitba6d844ec4938a6088c2cd626ea52a07fbace91c
tree94814e48ef82bf5c3b6a18c0b2a63eb5c0972c52
parente56e2e002b33aa51408fd76c5ad28aec43775886
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