RFR JDK-8007609

John Zavgren john.zavgren at oracle.com
Wed Feb 6 14:57:03 UTC 2013


Alan:
I like your change, but I think the free(result) statement would need to be eliminated, otherwise the block a few lines later:

/* Unable to get final path. */
if(len == 0 && result != NULL) {
   free(result);
   result = NULL;
}

would cause result to be freed twice.

<br>----- Original Message -----<br>From: Alan.Bateman at oracle.com<br>To: john.zavgren at oracle.com<br>Cc: core-libs-dev at openjdk.java.net<br>Sent: Wednesday, February 6, 2013 5:18:28 AM GMT -05:00 US/Canada Eastern<br>Subject: Re: RFR JDK-8007609<br><br><html>
  <head>
    
  </head>
  <div>
    On 05/02/2013 23:49, John Zavgren wrote:
    <blockquote cite="mid:3d9879ec-77e4-42f7-bc90-578d7c488054 at default">
      <pre>Greetings:

I modified the code in 
src/windows/native/java/io/WinNTFileSystem_md.c
so that it checks the return value of realloc() and frees memory when there is an error.

The webrev image of this change is visible at:
<a class="moz-txt-link-freetext" href="http://cr.openjdk.java.net/~jzavgren/8007609/webrev.01/" target="_blank">http://cr.openjdk.java.net/~jzavgren/8007609/webrev.01/</a>

Thanks!
John Zavgren
</pre>
    </blockquote>
    Formatting aside, it looks like the change means that a realloc fail
    will leave the file open. I think this is all that is needed:<br>
    <br>
    WCHAR* newResult = (WCHAR*)realloc(...);<br>
    if (newResult != NULL) {<br>
        len =
    
    <span class="changed">(*GetFinalPathNameByHandle_func)(</span>
    
    <span class="changed">h, newResult, len, 0);</span><br>
    } else {<br>
        free(result);<br>
        len = 0;<br>
    }<br>
    result = newResult;<br>
    <br>
    -Alan.<br>
  </div>
</html>


More information about the core-libs-dev mailing list