aboutsummaryrefslogtreecommitdiff
path: root/gdb/procfs.c
diff options
context:
space:
mode:
authorJoel Brobecker <brobecker@gnat.com>2011-11-10 16:36:18 +0000
committerJoel Brobecker <brobecker@gnat.com>2011-11-10 16:36:18 +0000
commit0a86f36427b729c3b7dfa5a9142848db9877ddc0 (patch)
treef8db270640cc485aa265cdb6a6c2a7172e29f129 /gdb/procfs.c
parent9bc118a5d44548773b26f6a7f186f14009f00786 (diff)
downloadgdb-0a86f36427b729c3b7dfa5a9142848db9877ddc0.zip
gdb-0a86f36427b729c3b7dfa5a9142848db9877ddc0.tar.gz
gdb-0a86f36427b729c3b7dfa5a9142848db9877ddc0.tar.bz2
[procfs] /proc/.../map file descriptor leak
When opening the procfs map file, we create a cleanup routine to make sure that the associated file descriptor gets closed, but we never call the cleanup. So the FD gets leaked. gdb/ChangeLog: * procfs.c (iterate_over_mappings): Call do_cleanups before returning.
Diffstat (limited to 'gdb/procfs.c')
-rw-r--r--gdb/procfs.c7
1 files changed, 6 insertions, 1 deletions
diff --git a/gdb/procfs.c b/gdb/procfs.c
index 871dd47..2a253a1 100644
--- a/gdb/procfs.c
+++ b/gdb/procfs.c
@@ -5217,6 +5217,7 @@ iterate_over_mappings (procinfo *pi, find_memory_region_ftype child_func,
int funcstat;
int map_fd;
int nmap;
+ struct cleanup *cleanups = make_cleanup (null_cleanup, NULL);
#ifdef NEW_PROC_API
struct stat sbuf;
#endif
@@ -5254,8 +5255,12 @@ iterate_over_mappings (procinfo *pi, find_memory_region_ftype child_func,
for (prmap = prmaps; nmap > 0; prmap++, nmap--)
if ((funcstat = (*func) (prmap, child_func, data)) != 0)
- return funcstat;
+ {
+ do_cleanups (cleanups);
+ return funcstat;
+ }
+ do_cleanups (cleanups);
return 0;
}