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/19 18:18:38 UTC
svn commit: r805865 - in /commons/sandbox/runtime/trunk/src:
main/native/include/acr_semaphore.h main/native/os/unix/psema.c
main/native/os/win32/psema.c main/native/test/testcase.c
test/org/apache/commons/runtime/TestSemaphore.java
Author: mturk
Date: Wed Aug 19 16:18:37 2009
New Revision: 805865
URL: http://svn.apache.org/viewvc?rev=805865&view=rev
Log:
Add SemaphoreRemove API call
Modified:
commons/sandbox/runtime/trunk/src/main/native/include/acr_semaphore.h
commons/sandbox/runtime/trunk/src/main/native/os/unix/psema.c
commons/sandbox/runtime/trunk/src/main/native/os/win32/psema.c
commons/sandbox/runtime/trunk/src/main/native/test/testcase.c
commons/sandbox/runtime/trunk/src/test/org/apache/commons/runtime/TestSemaphore.java
Modified: commons/sandbox/runtime/trunk/src/main/native/include/acr_semaphore.h
URL: http://svn.apache.org/viewvc/commons/sandbox/runtime/trunk/src/main/native/include/acr_semaphore.h?rev=805865&r1=805864&r2=805865&view=diff
==============================================================================
--- commons/sandbox/runtime/trunk/src/main/native/include/acr_semaphore.h (original)
+++ commons/sandbox/runtime/trunk/src/main/native/include/acr_semaphore.h Wed Aug 19 16:18:37 2009
@@ -87,6 +87,16 @@
*/
ACR_DECLARE(int) ACR_SemaphoreClose(JNIEnv *env, int semaphore);
+/**
+ * Remove the given semaphore.
+ * @param env JNI environment to use.
+ * @param name A name of the semaphore to open.
+ * @note This call has no effect on some platforms, but should be called
+ * before create call if there is unlinked semaphore left by the
+ * same name.
+ */
+ACR_DECLARE(int) ACR_SemaphoreRemove(JNIEnv *env, const acr_pchar_t *name);
+
#ifdef __cplusplus
}
#endif
Modified: commons/sandbox/runtime/trunk/src/main/native/os/unix/psema.c
URL: http://svn.apache.org/viewvc/commons/sandbox/runtime/trunk/src/main/native/os/unix/psema.c?rev=805865&r1=805864&r2=805865&view=diff
==============================================================================
--- commons/sandbox/runtime/trunk/src/main/native/os/unix/psema.c (original)
+++ commons/sandbox/runtime/trunk/src/main/native/os/unix/psema.c Wed Aug 19 16:18:37 2009
@@ -31,6 +31,10 @@
#define SEM_FAILED (-1)
#endif
+#ifndef NAME_MAX
+#define NAME_MAX (64)
+#endif
+
J_DECLARE_CLAZZ = {
NULL,
NULL,
@@ -48,7 +52,7 @@
struct acr_semaphore_t {
sem_t *sem;
int locked;
- char name[64];
+ char name[NAME_MAX];
};
static int semaphore_cleanup(void *sema, int type, unsigned int flags)
@@ -84,7 +88,7 @@
else {
if (*name != '/')
s->name[0] = '/';
- strlcat(s->name, name, 62);
+ strlcat(s->name, name, NAME_MAX - 2);
}
do {
s->sem = sem_open(s->name, O_CREAT | O_EXCL, 0644, value);
@@ -147,7 +151,7 @@
return -1;
if (*name != '/')
s->name[0] = '/';
- strlcat(s->name, name, 62);
+ strlcat(s->name, name, NAME_MAX -2);
s->sem = sem_open(s->name, O_RDWR);
if (s->sem == (sem_t *)SEM_FAILED) {
rc = ACR_GET_OS_ERROR();
@@ -181,6 +185,19 @@
return acr_ioh_close(sema);
}
+ACR_DECLARE(int) ACR_SemaphoreRemove(JNIEnv *_E, const acr_pchar_t *sname)
+{
+ char name[NAME_MAX] = "";
+ if (!sname) {
+ return ACR_EINVAL;
+ }
+ if (*sname != '/')
+ name[0] = '/';
+ strlcat(name, sname, NAME_MAX -2);
+
+ return sem_unlink(name);
+}
+
ACR_DECLARE(int) ACR_SemaphorePermSet(JNIEnv *_E, int sema, int perms,
acr_uid_t uid, acr_uid_t gid)
{
Modified: commons/sandbox/runtime/trunk/src/main/native/os/win32/psema.c
URL: http://svn.apache.org/viewvc/commons/sandbox/runtime/trunk/src/main/native/os/win32/psema.c?rev=805865&r1=805864&r2=805865&view=diff
==============================================================================
--- commons/sandbox/runtime/trunk/src/main/native/os/win32/psema.c (original)
+++ commons/sandbox/runtime/trunk/src/main/native/os/win32/psema.c Wed Aug 19 16:18:37 2009
@@ -230,6 +230,12 @@
}
+ACR_DECLARE(int) ACR_SemaphoreRemove(JNIEnv *_E, const wchar_t *name)
+{
+ /* No op on windows */
+ return ACR_SUCCESS;
+}
+
ACR_CLASS_LDEF(Semaphore)
{
int rv;
Modified: commons/sandbox/runtime/trunk/src/main/native/test/testcase.c
URL: http://svn.apache.org/viewvc/commons/sandbox/runtime/trunk/src/main/native/test/testcase.c?rev=805865&r1=805864&r2=805865&view=diff
==============================================================================
--- commons/sandbox/runtime/trunk/src/main/native/test/testcase.c (original)
+++ commons/sandbox/runtime/trunk/src/main/native/test/testcase.c Wed Aug 19 16:18:37 2009
@@ -805,3 +805,8 @@
return ACR_SemaphoreRelease(_E, s);
}
+ACR_JNI_EXPORT_DECLARE(jint, TestSemaphore, test006)(ACR_JNISTDARGS, jint s)
+{
+ return ACR_SemaphoreRemove(_E, sem_name);
+}
+
Modified: commons/sandbox/runtime/trunk/src/test/org/apache/commons/runtime/TestSemaphore.java
URL: http://svn.apache.org/viewvc/commons/sandbox/runtime/trunk/src/test/org/apache/commons/runtime/TestSemaphore.java?rev=805865&r1=805864&r2=805865&view=diff
==============================================================================
--- commons/sandbox/runtime/trunk/src/test/org/apache/commons/runtime/TestSemaphore.java (original)
+++ commons/sandbox/runtime/trunk/src/test/org/apache/commons/runtime/TestSemaphore.java Wed Aug 19 16:18:37 2009
@@ -31,6 +31,7 @@
private static native int test003(int v); // Close
private static native int test004(int v); // Wait
private static native int test005(int v); // Release
+ private static native int test006(int v); // Remove
public static Test suite() {
TestSuite suite = new TestSuite(TestSemaphore.class);
@@ -55,6 +56,19 @@
// Ignore
}
if (s < 0) {
+ try {
+ s = test001(0);
+ } catch (Throwable t) {
+ // Ignore
+ }
+ if (s > 0) {
+ owner = true;
+ }
+ }
+ if (s < 0) {
+ // Neither Create or Attach were sussesful
+ // Remove and try Create again
+ test006(0);
s = test001(0);
if (s > 0) {
owner = true;