<html>
  <head>

    <meta http-equiv="content-type" content="text/html; charset=utf-8">
  </head>
  <body bgcolor="#FFFFFF" text="#000000">
    The change for JDK-8321429 breaks the hashCode() method of
    sun.nio.ch.FileKey.<br>
    <br>
    Before this change, the hashCode was computed from long values as
    follows:<br>
    <br>
    return (int)(dwVolumeSerialNumber ^ (dwVolumeSerialNumber
    >>> 32)) +<br>
           (int)(nFileIndexHigh ^ (nFileIndexHigh >>> 32)) +<br>
           (int)(nFileIndexLow ^ (nFileIndexLow >>> 32));<br>
    <br>
    This adds the three 32-bit values for volumeSerialNumber,
    fileIndexHigh and fileIndexLow, producing a reasonable hash.<br>
    <br>
    With the change, the hashCode is computed from int values as
    follows:<br>
    <br>
    int h = dwVolumeSerialNumber;<br>
    h = h << 31 + nFileIndexHigh;<br>
    h = h << 31 + nFileIndexLow;<br>
    return h;<br>
    <br>
    Because << has lower precedence than +, this shifts the serial
    number out of h twice and is very likely to return zero.<br>
    My test results:  serialNumber=0xc8b4b431 indexHigh=0x00240000
    indexLow=0x00023be9 h=0x00000000<br>
    <br>
    This should be reverted to the previous algorithm suitably adjusted
    to use the new int values:<br>
    <br>
    return dwVolumeSerialNumber +<br>
           nFileIndexHigh +<br>
           nFileIndexLow;<br>
    <br>
    Simon<br>
    <br>
    <br>
    <br>
    <br>
  </body>
</html>