From 795d915c9b6efeea3d6d5574cecbaec3e16c763b Mon Sep 17 00:00:00 2001 From: Tom Tromey Date: Thu, 30 May 2013 17:33:41 +0000 Subject: [PATCH] fix source.c find_and_open_source can leak a cleanup. * source.c (find_and_open_source): Call do_cleanups. --- gdb/ChangeLog | 4 ++++ gdb/source.c | 4 ++++ 2 files changed, 8 insertions(+) diff --git a/gdb/ChangeLog b/gdb/ChangeLog index c2eb3bb8bd..080275e1de 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,7 @@ +2013-05-30 Tom Tromey + + * source.c (find_and_open_source): Call do_cleanups. + 2013-05-30 Tom Tromey * linux-thread-db.c (thread_db_load_search): Unconditionally diff --git a/gdb/source.c b/gdb/source.c index 161a6c43d0..71b6d53b50 100644 --- a/gdb/source.c +++ b/gdb/source.c @@ -985,6 +985,7 @@ find_and_open_source (const char *filename, char *path = source_path; const char *p; int result; + struct cleanup *cleanup; /* Quick way out if we already know its full name. */ @@ -1016,6 +1017,8 @@ find_and_open_source (const char *filename, *fullname = NULL; } + cleanup = make_cleanup (null_cleanup, NULL); + if (dirname != NULL) { /* If necessary, rewrite the compilation directory name according @@ -1072,6 +1075,7 @@ find_and_open_source (const char *filename, result = openp (path, OPF_SEARCH_IN_PATH, p, OPEN_MODE, fullname); } + do_cleanups (cleanup); return result; } -- 2.34.1