jdk/src/share/classes/sun/nio/ch/FileChannelImpl.java
changeset 21318 2dffe829fb18
parent 19607 bee007586d06
child 22561 5ee70f9edbb7
equal deleted inserted replaced
21317:176090ca2be7 21318:2dffe829fb18
   838         try {
   838         try {
   839             begin();
   839             begin();
   840             ti = threads.add();
   840             ti = threads.add();
   841             if (!isOpen())
   841             if (!isOpen())
   842                 return null;
   842                 return null;
   843             if (size() < position + size) { // Extend file size
   843 
       
   844             long filesize;
       
   845             do {
       
   846                 filesize = nd.size(fd);
       
   847             } while ((filesize == IOStatus.INTERRUPTED) && isOpen());
       
   848             if (!isOpen())
       
   849                 return null;
       
   850 
       
   851             if (filesize < position + size) { // Extend file size
   844                 if (!writable) {
   852                 if (!writable) {
   845                     throw new IOException("Channel not open for writing " +
   853                     throw new IOException("Channel not open for writing " +
   846                         "- cannot extend file to required size");
   854                         "- cannot extend file to required size");
   847                 }
   855                 }
   848                 int rv;
   856                 int rv;
   849                 do {
   857                 do {
   850                     rv = nd.truncate(fd, position + size);
   858                     rv = nd.truncate(fd, position + size);
   851                 } while ((rv == IOStatus.INTERRUPTED) && isOpen());
   859                 } while ((rv == IOStatus.INTERRUPTED) && isOpen());
       
   860                 if (!isOpen())
       
   861                     return null;
   852             }
   862             }
   853             if (size == 0) {
   863             if (size == 0) {
   854                 addr = 0;
   864                 addr = 0;
   855                 // a valid file descriptor is not required
   865                 // a valid file descriptor is not required
   856                 FileDescriptor dummy = new FileDescriptor();
   866                 FileDescriptor dummy = new FileDescriptor();