incubator-stdcxx-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Martin Sebor <se...@roguewave.com>
Subject Re: [patch] Exec utility memory leak fix
Date Tue, 22 Aug 2006 01:19:09 GMT
Andrew Black wrote:
> Greetings all.
> 
> Below is a short patch to fix a couple minor memory leaks in the exec 
> utility.  This leak was likely introduced with the support for complex 
> targets.

Hmm, I'm having trouble applying this patch on Solaris 9.
Attached is the the patch itself (copied from your post)
and the .rej file. Do you see what the problem is?

Martin

> 
> --Andrew Black
> 
> Log:
>     * runall.cpp (merge_argv): Update function documentation.
>       (run_target): Free argv array returned by merge_argv.
> 
> Index: runall.cpp
> ===================================================================
> --- runall.cpp  (revision 432706)
> +++ runall.cpp  (working copy)
> @@ -73,6 +73,9 @@
>     argument string is '%x' (no quotes), the contents of the provided argv
>     array will be inserted into the return array at that point.
> 
> +   It is the responsibility of the caller to free() the returned blocks of
> +   memory, which were allocated by a call to split_opt_string().
> +
>     @todo Figure out an escaping mechanism to allow '%x' to be passed to an
>     executable
> 
> @@ -402,7 +405,6 @@
>  static void
>  run_target (char* target, char** argv)
>  {
> -    struct exec_attrs status;
>      char** childargv;
> 
>      assert (0 != target);
> @@ -418,12 +420,13 @@
>      printf ("%-25.25s ", target_name);
>      fflush (stdout);
> 
> -    if (!check_target_ok (childargv [0]))
> -        return;
> +    if (check_target_ok (childargv [0])) {
> +        struct exec_attrs status = exec_file (childargv);
> +        process_results (childargv [0], &status);
> +    }
> 
> -    status = exec_file (childargv);
> -
> -    process_results (childargv [0], &status);
> +    free (childargv [0]);
> +    free (childargv);
>  }
> 
>  /**
> 


Mime
View raw message