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>
Tue, 8 Jan 2013 06:33:59 +0000 (00:33 -0600)
commite8e0e34dc1b67cfa76270d21815cd11ada3358dc
tree7308af8105c9cb7a26ea20886fbc63e55ee9ba53
parent7c200b04fd0e2b888628ff3168560b47c9d20747
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