Management libraries leak resources (memory, file/directory handles). Also a trailing whitespace fix in one place in libibcommon.
Signed-off-by: Michael S. Tsirkin <[EMAIL PROTECTED]> Index: libibumad/src/umad.c =================================================================== --- libibumad/src/umad.c (revision 2411) +++ libibumad/src/umad.c (working copy) @@ -357,8 +357,10 @@ get_ca(char *ca_name, umad_ca_t *ca) if (!(dir = opendir(dir_name))) return -ENOENT; - if ((r = scandir(dir_name, &namelist, 0, alphasort)) < 0) - return -EIO; + if ((r = scandir(dir_name, &namelist, 0, alphasort)) < 0) { + ret = errno < 0 ? errno : -EIO; + goto error; + } ret = 0; ca->numports = 0; @@ -388,6 +390,7 @@ get_ca(char *ca_name, umad_ca_t *ca) free(namelist[i]); free(namelist); + closedir(dir); put_ca(ca); return 0; @@ -395,7 +398,8 @@ clean: for (i = 0; i < r; i++) free(namelist[i]); free(namelist); - +error: + closedir(dir); release_ca(ca); return ret; Index: libibcommon/src/sysfs.c =================================================================== --- libibcommon/src/sysfs.c (revision 2411) +++ libibcommon/src/sysfs.c (working copy) @@ -56,6 +56,7 @@ #include <sys/poll.h> #include <syslog.h> #include <netinet/in.h> +#include <errno.h> #include "common.h" @@ -86,14 +87,20 @@ sys_read_string(char *dir_name, char *fi if ((fd = open(path, O_RDONLY)) < 0) return ret_code(); - if ((r = read(fd, str, max_len)) < 0) + if ((r = read(fd, str, max_len)) < 0) { + int e = errno; + close(fd); + errno = e; return ret_code(); + } str[(r < max_len) ? r : max_len - 1] = 0; if ((s = strrchr(str, '\n'))) *s = 0; - return 0; + + close(fd); + return 0; } int -- MST - Michael S. Tsirkin _______________________________________________ openib-general mailing list openib-general@openib.org http://openib.org/mailman/listinfo/openib-general To unsubscribe, please visit http://openib.org/mailman/listinfo/openib-general