Uploaded image for project: 'JDK'
  1. JDK
  2. JDK-4641545

"Bad address" IOException in FileChannel.transferFrom(..)

XMLWordPrintable

    • Icon: Bug Bug
    • Resolution: Cannot Reproduce
    • Icon: P4 P4
    • None
    • 1.4.0
    • core-libs
    • x86
    • linux



      Name: gm110360 Date: 02/21/2002


      FULL PRODUCT VERSION :
      java version "1.4.0-rc"
      Java(TM) 2 Runtime Environment, Standard Edition (build 1.4.0-rc-b91)
      Java HotSpot(TM) Client VM (build 1.4.0-rc-b91, mixed mode)


      FULL OPERATING SYSTEM VERSION :
      glibc-2.2.4-13
      Linux 2.4.7-10 #1 Thu Sep 6 17:21:28 EDT 2001 i686 unknown
      Red Hat Linux release 7.2 (Enigma)

      A DESCRIPTION OF THE PROBLEM :
      I tested FileChannel preformance
      and tried to invoke some methods in cycle
      and found following exception in method
      FileChannel.transferFrom(..).

      The cycle number (when the exception occurs) is not the
      same at each test running and there are often more
      than one exception.


      STEPS TO FOLLOW TO REPRODUCE THE PROBLEM :
      1. Create file CopyNio.java, compile it, set classpath.
      2. Write command to create very simple testing file
         that contains only "a" character:
            $ echo a>a
      3. Write command:
            $ java CopyNio a a.copied

      EXPECTED VERSUS ACTUAL BEHAVIOR :
      Expected:
        Program should silently end with copy of "a"
        file at "a.copied"

      What happens:
        Program prints exception at some iteration step (or more).
        When I stopped the execution
        (System.exit(-1) in catch phase), file "a.copied" exists,
        but has zero length.

      ERROR MESSAGES/STACK TRACES THAT OCCUR :
      Cyclus: 959
      java.io.IOException: Bad address
              at sun.nio.ch.FileDispatcher.pwrite0(Native Method)
              at sun.nio.ch.FileDispatcher.pwrite(FileDispatcher.java:46)
              at sun.nio.ch.IOUtil.writeFromNativeBuffer(IOUtil.java:96)
              at sun.nio.ch.IOUtil.write(IOUtil.java:60)
              at sun.nio.ch.FileChannelImpl.write(FileChannelImpl.java:397)
              at sun.nio.ch.FileChannelImpl.transfer(FileChannelImpl.java:330)
              at sun.nio.ch.FileChannelImpl.transferFrom(FileChannelImpl.java:316)
              at CopyNio.main(CopyNio.java:19)

      This bug can be reproduced often.

      ---------- BEGIN SOURCE ----------
      import java.io.*;
      import java.nio.*;
      import java.nio.channels.*;

      public class CopyNio
      {
        public static void main(String[] args) throws IOException
        {
          for (int i = 0; i < 1000; i++)
          {
            FileInputStream fis = null;
            FileOutputStream fos = null;
            try
            {
              fis = new FileInputStream(new File(args[0]));
              fos = new FileOutputStream(new File(args[1]));
              FileChannel fic = fis.getChannel();
              FileChannel foc = fos.getChannel();
              foc.transferFrom(fic, 0L, fic.size());
              //fic.transferTo(0L, fic.size(), foc);
            }
            catch (Exception e)
            {
              System.err.println("Cyclus: " + i);
              e.printStackTrace();
            }
            finally
            {
              if (fis != null) fis.close();
              if (fos != null) fos.close();
            }
          }
        }
      }
      ---------- END SOURCE ----------

      CUSTOMER WORKAROUND :
      When I use commented line with transferTo(..) method,
      it works without any error message.
      (Review ID: 139664)
      ======================================================================

            mmcclosksunw Michael Mccloskey (Inactive)
            gmanwanisunw Girish Manwani (Inactive)
            Votes:
            0 Vote for this issue
            Watchers:
            0 Start watching this issue

              Created:
              Updated:
              Resolved:
              Imported:
              Indexed: