Since we're all on this perfectionist quest for quality here, I noticed
that we could replace allocation for path components with a single
allocation using NUL as a separator.  I think I'll go code that up.

Also note to all: if java VMs are created and destroyed without the process
terminating, there is a small leak here (and in many other places in the
JDK).  There would be a huge amount of work if we ever wanted to get that
right (especially if we supported concurrently active JVMs).


On Fri, Mar 22, 2013 at 7:38 AM, John Zavgren <john.zavg...@oracle.com>wrote:

> Greetings:
>
> I made modifications as per Martin's suggestions:
> 1.) free pathv on "abort".
> 2.) allocate memory for storing the "cwd" string, and then copy it into
> the memory location (to make sure that the contents of the pathv[] array
> don't refer to memory that's from the stack of the procedure that created
> it.)
>
> Thanks!
> John
>
>
> http://cr.openjdk.java.net/~jzavgren/8008118/webrev.06/
>
> ----- Original Message -----
> From: marti...@google.com
> To: chris...@zoulas.com
> Cc: john.zavg...@oracle.com, core-libs-dev@openjdk.java.net
> Sent: Friday, March 22, 2013 10:19:24 AM GMT -05:00 US/Canada Eastern
> Subject: Re: RFR-8008118
>
>
>
>
> On Thu, Mar 21, 2013 at 12:11 PM, Christos Zoulas <chris...@zoulas.com>wrote:
>
>> On Mar 21, 11:36am, john.zavg...@oracle.com (John Zavgren) wrote:
>> -- Subject: Re: RFR-8008118
>>
>> | All:
>> |
>> | How does this look?
>> | 1.) I reverted the for statement formatting change.
>>
>> Not exactly. Now it is indented incorrectly.
>>
>>
> Agreed.  Really revert.
>
>
>> | 2.) I removed the goto statement and "inlined" some code instead.
>>
>> I prefer to write simpler code that works with both signed and unsigned
>> indexes:
>>
>> +                while (i > 0)
>> +                    if (pathv[--i] != cwd)
>> +                        free(pathv[i]);
>> +
>>
>>
> Christos' suggestion looks pretty good.
>
> As Mark noted, need to add missing free of pathv itself.
>
>
>> | 3.) I checked to make sure that we're not freeing memory that we didn't
>> act=
>> | ually allocate. (Path vector elements that are empty.)
>>
>> You are still using the "./" string literal constant in the code so you'll
>> end up freeing it (the compiler will prolly merge the two instances and
>> you'll get lucky but it is semantically incorrect).
>>
>
> Agreed,
>
> pathv[i] = cwd;
>

Reply via email to