core: release all lines in gpiod_chip_close()
authorBartosz Golaszewski <bartekgola@gmail.com>
Mon, 2 Jan 2017 13:55:25 +0000 (14:55 +0100)
committerBartosz Golaszewski <bartekgola@gmail.com>
Mon, 2 Jan 2017 13:55:25 +0000 (14:55 +0100)
This fixes a memory leak if the user forgets to explicitly release
requested lines.

Signed-off-by: Bartosz Golaszewski <bartekgola@gmail.com>
core.c

diff --git a/core.c b/core.c
index 077c116d3af9bb44be78c2f72ae10dcddbfa2399..cc72c4de6ff16add640c2c06c6c7b6e9f0908884 100644 (file)
--- a/core.c
+++ b/core.c
@@ -382,6 +382,13 @@ struct gpiod_chip * gpiod_chip_open_lookup(const char *descr)
 
 void gpiod_chip_close(struct gpiod_chip *chip)
 {
+       unsigned int i;
+
+       for (i = 0; i < chip->cinfo.lines; i++) {
+               if (chip->lines[i].requested)
+                       gpiod_line_release(&chip->lines[i]);
+       }
+
        close(chip->fd);
        free(chip->lines);
        free(chip);