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:26:03 +0000 (00:26 -0600)
commit60e0a181133349a94171f9f00ae7f7e947767f39
treebce193381380320f8c9930de6704dc292803c2a5
parentc98d92389b6747649698970b729cbeda6f3c3ae8
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