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 16:13:29 GMT
Andrew Black wrote:
> Looking at the .rej file, I'm not seeing the difference between the two 
> sections indicated.
> 
> What does it look like if you execute 'svn diff runall.cpp | diff 
> runall.patch -' after applying the patch?  If there is no difference 
> between the resulting patches, it would seem to me that the solaris 
> patch utility has issues.

Sorry, I have no time to play with it today. There are known
incompatibilities between GNU patch (I assume that's what you
used) and other implementations of the utility so maybe it's
one of them.

Martin

> 
> --Andrew Black
> 
> Martin Sebor wrote:
> 
>> 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