From 0a86f36427b729c3b7dfa5a9142848db9877ddc0 Mon Sep 17 00:00:00 2001 From: Joel Brobecker Date: Thu, 10 Nov 2011 16:36:18 +0000 Subject: [PATCH] [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. --- gdb/ChangeLog | 5 +++++ gdb/procfs.c | 7 ++++++- 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 4af934957bf..24bf23f02cb 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,8 @@ +2011-11-10 Joel Brobecker + + * procfs.c (iterate_over_mappings): Call do_cleanups before + returning. + 2011-11-09 Doug Evans * gdbtypes.c (check_typedef): Document that this function can diff --git a/gdb/procfs.c b/gdb/procfs.c index 871dd47ab9d..2a253a1bb08 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; } -- 2.30.2