You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@commons.apache.org by mt...@apache.org on 2009/08/20 19:46:22 UTC

svn commit: r806274 - in /commons/sandbox/runtime/trunk/src/main: java/org/apache/commons/runtime/Mutex.java native/shared/mutex.c

Author: mturk
Date: Thu Aug 20 17:46:22 2009
New Revision: 806274

URL: http://svn.apache.org/viewvc?rev=806274&view=rev
Log:
Initial Mutex Java API

Modified:
    commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/Mutex.java
    commons/sandbox/runtime/trunk/src/main/native/shared/mutex.c

Modified: commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/Mutex.java
URL: http://svn.apache.org/viewvc/commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/Mutex.java?rev=806274&r1=806273&r2=806274&view=diff
==============================================================================
--- commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/Mutex.java (original)
+++ commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/Mutex.java Thu Aug 20 17:46:22 2009
@@ -17,6 +17,8 @@
 
 import java.io.IOException;
 import org.apache.commons.runtime.io.File;
+import org.apache.commons.runtime.io.Status;
+import org.apache.commons.runtime.exception.ClosedDescriptorException;
 import org.apache.commons.runtime.exception.OperatingSystemException;
 import org.apache.commons.runtime.exception.UnsupportedOperatingSystemException;
 
@@ -45,5 +47,128 @@
         this.mutex = mutex;
     }
 
+    private static native Mutex create0()
+        throws IOException, SecurityException, OutOfMemoryError;
+    /**
+     * Create and make accessable anonymous {@code Mutex} object.
+     * <p>
+     * A note about Anonymous vs. Named mutex objects:<br />
+     *         Not all plaforms support anonymous mutexess, but in
+     *         some cases it is prefered over other types of mutex
+     *         implementations. If such a system is not available,
+     *         {@code UnsupportedOperatingSystemException} is thrown.
+     * </p>
+     */
+    public static Mutex create()
+        throws IOException, SecurityException, OutOfMemoryError
+    {
+        return create0();
+    }
+
+    private static native Mutex create1(String name)
+        throws IOException, SecurityException, OutOfMemoryError;
+    /**
+     * Create and make accessable named {@code Mutex} object.
+     * <p>
+     * A note about Anonymous vs. Named mutex objects:<br />
+     *         Not all plaforms support anonymous mutexs, but in
+     *         some cases it is prefered over other types of mutex
+     *         implementations. If such a system is not available,
+     *         {@code UnsupportedOperatingSystemException} is thrown.
+     * </p>
+     * @param file The abstract file path to use for mutex on platforms
+     *             that require it.
+     */
+    public static Mutex create(File file)
+        throws IOException, SecurityException, OutOfMemoryError
+    {
+        return create1(file.getPath());
+    }
+
+    private static native Mutex create2(String name)
+        throws IOException, SecurityException, OutOfMemoryError;
+    /**
+     * Open a mutex that was created by another process.
+     * @param file The abstract file path that was used to create a
+     *             mutex.
+     */
+    public static Mutex open(File file)
+        throws IOException, SecurityException, OutOfMemoryError,
+               UnsupportedOperatingSystemException
+    {
+        Mutex mutex = create2(file.getPath());
+        if (mutex == null)
+            throw new UnsupportedOperatingSystemException();
+        return mutex;
+    }
+
+    private static native int close0(Descriptor sem)
+        throws IOException, SecurityException;
+    /**
+     * Close and remove the {@code this} Mutex object from the system.
+     */
+    public void close()
+        throws IOException, SecurityException, ClosedDescriptorException
+    {
+        if (mutex.valid()) {
+            close0(mutex);
+        }
+        else {
+            throw new ClosedDescriptorException();
+        }
+    }
+
+    public static native void lock0(Descriptor sem)
+        throws IOException, SecurityException;
+    /**
+     * Acquire the lock for {@code this} Mutex.
+     * If the Mutex is already locked,
+     * the current thread will be put to sleep until the lock becomes available.
+     */
+    public void lock()
+        throws IOException, SecurityException, ClosedDescriptorException
+    {
+        if (mutex.valid()) {
+            lock0(mutex);
+        }
+        else {
+            throw new ClosedDescriptorException();
+        }
+    }
+
+    public static native boolean lock1(Descriptor sem)
+        throws IOException, SecurityException;
+    /**
+     * Attempt to acquire the lock for {@code this} Mutex.
+     * If the mutex has already
+     * been acquired, the call returns immediately with {@code false}.
+     */
+    public boolean tryLock()
+        throws IOException, SecurityException, ClosedDescriptorException
+    {
+        if (mutex.valid()) {
+            return lock1(mutex);
+        }
+        else {
+            throw new ClosedDescriptorException();
+        }
+    }
+
+    public static native void release0(Descriptor sem)
+        throws IOException, SecurityException;
+    /**
+     * Release the lock for {@code this} Mutex.
+     */
+    public void release()
+        throws IOException, SecurityException, ClosedDescriptorException
+    {
+        if (mutex.valid()) {
+            release0(mutex);
+        }
+        else {
+            throw new ClosedDescriptorException();
+        }
+    }
+
 }
 

Modified: commons/sandbox/runtime/trunk/src/main/native/shared/mutex.c
URL: http://svn.apache.org/viewvc/commons/sandbox/runtime/trunk/src/main/native/shared/mutex.c?rev=806274&r1=806273&r2=806274&view=diff
==============================================================================
--- commons/sandbox/runtime/trunk/src/main/native/shared/mutex.c (original)
+++ commons/sandbox/runtime/trunk/src/main/native/shared/mutex.c Thu Aug 20 17:46:22 2009
@@ -24,8 +24,7 @@
 #include "acr_descriptor.h"
 #include "acr_procmutex.h"
 
-ACR_JNI_EXPORT_DECLARE(jobject, Mutex, create0)(ACR_JNISTDARGS,
-                                                jint value)
+ACR_JNI_EXPORT_DECLARE(jobject, Mutex, create0)(ACR_JNISTDARGS)
 {
 
     jobject mtxo = NULL;