Return-Path: Delivered-To: apmail-commons-commits-archive@minotaur.apache.org Received: (qmail 52524 invoked from network); 14 Oct 2009 06:50:29 -0000 Received: from hermes.apache.org (HELO mail.apache.org) (140.211.11.3) by minotaur.apache.org with SMTP; 14 Oct 2009 06:50:29 -0000 Received: (qmail 41227 invoked by uid 500); 14 Oct 2009 06:50:29 -0000 Delivered-To: apmail-commons-commits-archive@commons.apache.org Received: (qmail 41124 invoked by uid 500); 14 Oct 2009 06:50:28 -0000 Mailing-List: contact commits-help@commons.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: dev@commons.apache.org Delivered-To: mailing list commits@commons.apache.org Received: (qmail 41115 invoked by uid 99); 14 Oct 2009 06:50:28 -0000 Received: from nike.apache.org (HELO nike.apache.org) (192.87.106.230) by apache.org (qpsmtpd/0.29) with ESMTP; Wed, 14 Oct 2009 06:50:28 +0000 X-ASF-Spam-Status: No, hits=-2000.0 required=10.0 tests=ALL_TRUSTED X-Spam-Check-By: apache.org Received: from [140.211.11.4] (HELO eris.apache.org) (140.211.11.4) by apache.org (qpsmtpd/0.29) with ESMTP; Wed, 14 Oct 2009 06:50:18 +0000 Received: by eris.apache.org (Postfix, from userid 65534) id 8173B23888CB; Wed, 14 Oct 2009 06:49:57 +0000 (UTC) Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: svn commit: r825030 - in /commons/sandbox/runtime/trunk/src/main: java/org/apache/commons/runtime/io/FileInstance.java java/org/apache/commons/runtime/io/FileLock.java java/org/apache/commons/runtime/io/FileLockImpl.java native/os/unix/dir.c Date: Wed, 14 Oct 2009 06:49:57 -0000 To: commits@commons.apache.org From: mturk@apache.org X-Mailer: svnmailer-1.0.8 Message-Id: <20091014064957.8173B23888CB@eris.apache.org> X-Virus-Checked: Checked by ClamAV on apache.org Author: mturk Date: Wed Oct 14 06:49:56 2009 New Revision: 825030 URL: http://svn.apache.org/viewvc?rev=825030&view=rev Log: Split FileLock to abstract class and private implementation Added: commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/io/FileLockImpl.java (with props) Modified: commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/io/FileInstance.java commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/io/FileLock.java commons/sandbox/runtime/trunk/src/main/native/os/unix/dir.c Modified: commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/io/FileInstance.java URL: http://svn.apache.org/viewvc/commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/io/FileInstance.java?rev=825030&r1=825029&r2=825030&view=diff ============================================================================== --- commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/io/FileInstance.java (original) +++ commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/io/FileInstance.java Wed Oct 14 06:49:56 2009 @@ -53,7 +53,7 @@ /* * List of all lock regions to this file. */ - private Vector locks = new Vector(2); + private Vector locks = new Vector(2); /** * Return the {@link Descriptor} accosicated with this file. @@ -371,9 +371,9 @@ private boolean regionOverlaps(long offset, long length) { - for (Enumeration e = locks.elements(); e.hasMoreElements();) { + for (Enumeration e = locks.elements(); e.hasMoreElements();) { try { - FileLock lck = e.nextElement(); + FileLockImpl lck = e.nextElement(); /* Check if we already have the valid lock * for the requested region. */ @@ -440,7 +440,7 @@ } FileWrapper.lock(fd, type); - FileLock lock = new FileLock(fd, type); + FileLockImpl lock = new FileLockImpl(fd, type); /* Add the FileLock to the list of locks */ locks.add(lock); @@ -493,7 +493,7 @@ */ throw new OverlappingFileLockException(); } - FileLock lock = new FileLock(fd, type, offset, length); + FileLockImpl lock = new FileLockImpl(fd, type, offset, length); /* Add the FileLock to the list of locks */ locks.add(lock); Modified: commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/io/FileLock.java URL: http://svn.apache.org/viewvc/commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/io/FileLock.java?rev=825030&r1=825029&r2=825030&view=diff ============================================================================== --- commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/io/FileLock.java (original) +++ commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/io/FileLock.java Wed Oct 14 06:49:56 2009 @@ -73,61 +73,23 @@ * Further care should be exercised when locking files maintained on network * file systems, since they often have further limitations. */ -public final class FileLock +public abstract class FileLock { /* - * The lock starting position. - */ - private final long offset; - /* - * The lock length in bytes. - */ - private final long length; - /* - * File Descriptor for this lock. - */ - private Descriptor fd; - /* - * FileLockType flags. + * FileLockType mode. */ private EnumSet mode; /** - * Create new {@code FileLock} that locks the entire file. + * Create new {@code FileLock} instance. * - * @param fd - * the file {@code Descriptor} this lock is attached to. * @param mode * file lock mode. */ - protected FileLock(Descriptor fd, EnumSet mode) + public FileLock(EnumSet mode) { - this.fd = fd; this.mode = mode; - offset = 0; - length = -1; - } - - /** - * Create new {@code FileLock} that locks the region of file. - * - * @param fd - * the file {@code Descriptor} this lock is attached to. - * @param mode - * file lock mode. - * @param start - * the starting position for the lock. - * @param len - * the length of the lock. - */ - protected FileLock(Descriptor fd, EnumSet mode, - long start, long len) - { - this.fd = fd; - this.mode = mode; - offset = start; - length = len; } /** @@ -140,21 +102,7 @@ * the length of the comparative lock. * @return {@code true} if there is an overlap, {@code false} otherwise. */ - public final boolean overlaps(long start, long len) - { - /* - * Negative length means the entire file - * so it will always overlap with another lock - */ - if (length < 0 || len < 0) - return true; - final long end = offset + length - 1; - final long siz = start + len - 1; - if (end < start || offset > siz) { - return false; - } - return true; - } + public abstract boolean overlaps(long start, long len); /** * Indicates whether this lock is a valid file lock. The lock is @@ -163,33 +111,21 @@ * * @return {@code true} if the lock is valid, {@code false} otherwise. */ - public boolean isValid() - { - if (fd == null) - return false; - else - return fd.valid(); - } + public abstract boolean isValid(); /** * Returns the lock's starting position in the file. * * @return the lock position. */ - public final long position() - { - return offset; - } + public abstract long position(); /** * Returns the length of the file lock in bytes. * * @return the size of the file lock in bytes. */ - public final long size() - { - return length; - } + public abstract long size(); /** * Indicates if the file lock is shared with other processes @@ -198,7 +134,7 @@ * @return {@code true} if the lock is a shared lock, * {@code false} if it is exclusive. */ - public boolean isShared() + public final boolean isShared() { return mode.contains(FileLockType.SHARED); } @@ -209,7 +145,7 @@ * @return {@code true} if the lock is blocking lock, * {@code false} if it is non-blocking. */ - public boolean isBlocking() + public final boolean isBlocking() { return !mode.contains(FileLockType.NONBLOCK); } @@ -229,18 +165,7 @@ * @throws IOException * If some other I/O error occurs. */ - public void release() - throws IOException - { - if (fd == null) { - // Already released - return; - } - if (length < 0) - FileWrapper.unlock(fd); - else - FileWrapper.unlock(fd, offset, length); - fd = null; - } + public abstract void release() + throws IOException; } Added: commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/io/FileLockImpl.java URL: http://svn.apache.org/viewvc/commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/io/FileLockImpl.java?rev=825030&view=auto ============================================================================== --- commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/io/FileLockImpl.java (added) +++ commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/io/FileLockImpl.java Wed Oct 14 06:49:56 2009 @@ -0,0 +1,150 @@ +/* Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.commons.runtime.io; + +import org.apache.commons.runtime.Descriptor; +import org.apache.commons.runtime.exception.ClosedDescriptorException; +import org.apache.commons.runtime.exception.AsyncClosedDescriptorException; +import org.apache.commons.runtime.exception.InvalidDescriptorException; +import org.apache.commons.runtime.exception.TimeoutException; +import java.io.IOException; +import java.util.EnumSet; + +/** + * A {@code FileLock} implementatiom. + */ +class FileLockImpl extends FileLock +{ + + /* + * The lock starting position. + */ + private final long offset; + /* + * The lock length in bytes. + */ + private final long length; + /* + * File Descriptor for this lock. + */ + private Descriptor fd; + + /** + * Create new {@code FileLock} that locks the entire file. + * + */ + public FileLockImpl(Descriptor fd, EnumSet mode) + { + super(mode); + this.fd = fd; + offset = 0; + length = -1; + } + + /** + * Create new {@code FileLock} that locks the region of file. + * + */ + public FileLockImpl(Descriptor fd, EnumSet mode, + long start, long len) + { + super(mode); + this.fd = fd; + offset = start; + length = len; + } + + /** + * Indicates if the receiver's lock region overlaps the region described + * in the parameter list. + * + */ + @Override + public final boolean overlaps(long start, long len) + { + /* + * Negative length means the entire file + * so it will always overlap with another lock + */ + if (length < 0 || len < 0) + return true; + final long end = offset + length - 1; + final long siz = start + len - 1; + if (end < start || offset > siz) { + return false; + } + return true; + } + + /** + * Indicates whether this lock is a valid file lock. The lock is + * valid unless the underlying Descriptor has been closed or it has been + * explicitly released. + * + */ + @Override + public boolean isValid() + { + if (fd == null) + return false; + else + return fd.valid(); + } + + /** + * Returns the lock's starting position in the file. + * + */ + @Override + public final long position() + { + return offset; + } + + /** + * Returns the length of the file lock in bytes. + * + */ + @Override + public final long size() + { + return length; + } + + + /** + * Releases this particular lock on the file. + * If the lock is invalid then this method has no effect. + * Once released, the lock becomes invalid. + * + */ + @Override + public void release() + throws IOException + { + if (fd == null) { + // Already released + return; + } + if (length < 0) + FileWrapper.unlock(fd); + else + FileWrapper.unlock(fd, offset, length); + fd = null; + } + +} Propchange: commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/io/FileLockImpl.java ------------------------------------------------------------------------------ svn:eol-style = native Modified: commons/sandbox/runtime/trunk/src/main/native/os/unix/dir.c URL: http://svn.apache.org/viewvc/commons/sandbox/runtime/trunk/src/main/native/os/unix/dir.c?rev=825030&r1=825029&r2=825030&view=diff ============================================================================== --- commons/sandbox/runtime/trunk/src/main/native/os/unix/dir.c (original) +++ commons/sandbox/runtime/trunk/src/main/native/os/unix/dir.c Wed Oct 14 06:49:56 2009 @@ -151,7 +151,7 @@ type = ACR_FT_UNKFILE; break; } - rv = ACR_NewFileInfoObject(_E, dp->d_name, type); + rv = ACR_NewFileInfoObjectA(_E, dp->d_name, type); } else break;