serial-dmm: Add separate error exit path for serial_dmm_scan()
authorAlexandru Gagniuc <mr.nuke.me@gmail.com>
Thu, 3 Jan 2013 03:51:33 +0000 (21:51 -0600)
committerAlexandru Gagniuc <mr.nuke.me@gmail.com>
Sat, 2 Feb 2013 15:01:32 +0000 (09:01 -0600)
commita2ac605aded0ff3379eb573c3923366111899864
tree308688ca519ba9333258e0e0e8d29d616fa08fab
parent04cdfbe0d4296805dba8124c4815309c89913537
serial-dmm: Add separate error exit path for serial_dmm_scan()

The problem with having a single exit path for serial_dmm_scan was that we would
not know if we encountered an error or not. When we encounter error, we need to
clear any allocated resources. This was not done, causing memory leaks when
hw_scan() was invoked, but no device was connected.

Having a separate exit path for errors allows us to properly clean up any
allocated resources. We can simply free all our resources in the error path,
since our cleanup helpers are NULL-tolerant.

For example, when the device was not detected, struct sr_serial_dev_inst *serial
was never freed, causing a "definitely lost" memory leak.

Other possible failure points were simulated by replacing the if(!malloc())
clauses with if(!0).

Tested with no device attached
$ 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>
hardware/serial-dmm/api.c