To add some contexts not in the commit message, I knew that recent
versions of Bash consume more memory when the same shell script is
loaded.  After bisecting, I realized that the increase in memory use
was actually caused by a single commit ba4ab055 (see the attached
image.  The vertical axis is the increase of RSS measured by comparing
the results of `ps -o rss "$$"' before and after `source <script>',
and the horizontal axis is the sequential number of commit in the
devel branch).

In particular, the increase apparently started to happen with the
following hunk (on 2011-12-15 according to ChangeLog):

> diff --git a/execute_cmd.c b/execute_cmd.c
> index e102eee9..adfaa486 100644
> --- a/execute_cmd.c
> +++ b/execute_cmd.c
> @@ -5251,7 +5251,11 @@ execute_intern_function (name, function)
>        return (EXECUTION_FAILURE);
>      }
>
> -  bind_function (name->word, function);
> +#if defined (DEBUGGER)
> +  bind_function_def (name->word, funcdef);
> +#endif
> +
> +  bind_function (name->word, funcdef->command);
>    return (EXECUTION_SUCCESS);
>  }

Related changes in the past:

* The `bind_function_def' had saved the function definition from the
  beginning when it was introduced in commit d3a24ed2 (2011-02-15).
  At that time, it was called only in the parsing phase.
* In the next commit 5e13499c (2011-12-03), it was modified not to
  save the function body for the first call of `bind_function_def'.
* Later, in commit ba4ab055 (2011-12-15), `bind_function_def' was
  started to be called also in the defining phase
  (`execute_intern_function' in execute_cmd.c).
* In commit 879213c6 (2018-01-03), it was modified so that the
  function information at the parsing time does not overwrite the
  existing function information, after the report by Bruno Vasselle:
  https://lists.gnu.org/archive/html/bug-bash/2017-12/msg00056.html

Reply via email to