From 562f943bccc5f35b000983a1aa9f9a8af7b3cad0 Mon Sep 17 00:00:00 2001 From: Doug Evans Date: Mon, 19 Sep 2011 19:01:40 +0000 Subject: [PATCH] * python/py-auto-load.c (source_section_scripts): Fix file descriptor leak. * python/python.c (source_python_script_for_objfile): Tweak comments. --- gdb/ChangeLog | 6 ++++++ gdb/python/py-auto-load.c | 16 ++++++++-------- gdb/python/python.c | 7 ++++--- 3 files changed, 18 insertions(+), 11 deletions(-) diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 053c6efd276..1b2519b0249 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,9 @@ +2011-09-19 Doug Evans + + * python/py-auto-load.c (source_section_scripts): Fix file + descriptor leak. + * python/python.c (source_python_script_for_objfile): Tweak comments. + 2011-09-18 Yao Qi Ulrich Weigand diff --git a/gdb/python/py-auto-load.c b/gdb/python/py-auto-load.c index 158b1cbfe22..75fa0411ad9 100644 --- a/gdb/python/py-auto-load.c +++ b/gdb/python/py-auto-load.c @@ -296,9 +296,6 @@ source_section_scripts (struct objfile *objfile, const char *source_name, in_hash_table = maybe_add_script (pspace_info->loaded_scripts, file, opened ? full_path : NULL); - if (opened) - free (full_path); - if (! opened) { /* We don't throw an error, the program is still debuggable. */ @@ -310,12 +307,15 @@ Use `info auto-load-scripts [REGEXP]' to list them."), GDBPY_AUTO_SECTION_NAME, objfile->name); pspace_info->script_not_found_warning_printed = TRUE; } - continue; } - - /* If this file is not currently loaded, load it. */ - if (! in_hash_table) - source_python_script_for_objfile (objfile, stream, file); + else + { + /* If this file is not currently loaded, load it. */ + if (! in_hash_table) + source_python_script_for_objfile (objfile, stream, file); + fclose (stream); + free (full_path); + } } } diff --git a/gdb/python/python.c b/gdb/python/python.c index 67649c3cd49..4ef5715aa93 100644 --- a/gdb/python/python.c +++ b/gdb/python/python.c @@ -903,7 +903,10 @@ gdbpy_progspaces (PyObject *unused1, PyObject *unused2) static struct objfile *gdbpy_current_objfile; /* Set the current objfile to OBJFILE and then read STREAM,FILE as - Python code. */ + Python code. + STREAM is left open, it is up to the caller to close it. + If an exception occurs python will print the traceback and + clear the error indicator. */ void source_python_script_for_objfile (struct objfile *objfile, @@ -914,8 +917,6 @@ source_python_script_for_objfile (struct objfile *objfile, cleanups = ensure_python_env (get_objfile_arch (objfile), current_language); gdbpy_current_objfile = objfile; - /* Note: If an exception occurs python will print the traceback and - clear the error indicator. */ PyRun_SimpleFile (stream, file); do_cleanups (cleanups); -- 2.30.2