equal
deleted
inserted
replaced
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(); |