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/21 09:52:34 UTC
svn commit: r806439 -
/commons/sandbox/runtime/trunk/src/main/native/os/darwin/pmutex.c
Author: mturk
Date: Fri Aug 21 07:52:34 2009
New Revision: 806439
URL: http://svn.apache.org/viewvc?rev=806439&view=rev
Log:
Few comments on Darwin muteses
Modified:
commons/sandbox/runtime/trunk/src/main/native/os/darwin/pmutex.c
Modified: commons/sandbox/runtime/trunk/src/main/native/os/darwin/pmutex.c
URL: http://svn.apache.org/viewvc/commons/sandbox/runtime/trunk/src/main/native/os/darwin/pmutex.c?rev=806439&r1=806438&r2=806439&view=diff
==============================================================================
--- commons/sandbox/runtime/trunk/src/main/native/os/darwin/pmutex.c (original)
+++ commons/sandbox/runtime/trunk/src/main/native/os/darwin/pmutex.c Fri Aug 21 07:52:34 2009
@@ -14,6 +14,13 @@
* limitations under the License.
*/
+/* File lock based mutex implementation.
+ * XXX: Darwin uses posix semaphores so they could
+ * probably be used for mutexes as well.
+ * Of course they don't have a descent API for
+ * setting the permissions afterwards.
+ */
+
#include "acr.h"
#include "acr_private.h"
#include "acr_arch.h"
@@ -67,7 +74,7 @@
}
if (m->filedes > 0)
close(m->filedes);
- if (m->fname) {
+ if (m->fname) {
unlink(m->fname);
free(m->fname);
}
@@ -99,7 +106,7 @@
if (m->anon)
m->filedes = mkstemp(m->fname);
else
- m->filedes = open(m->fname, O_CREAT | O_WRONLY | O_EXCL, 0644);
+ m->filedes = open(m->fname, O_CREAT | O_WRONLY | O_EXCL, 0660);
if (m->filedes < 0) {
rc = ACR_GET_OS_ERROR();
@@ -121,7 +128,7 @@
}
ACR_DECLARE(int) ACR_ProcMutexAttach(JNIEnv *_E, const acr_pchar_t *fname)
-{
+{
int rc = 0;
acr_pmutex_t *m;
@@ -162,7 +169,7 @@
if (IS_INVALID_HANDLE(m) || ACR_IOH_TYPE(mutex) != ACR_DT_MUTEX) {
return ACR_EINVAL;
- }
+ }
op.l_whence = SEEK_SET; /* from current point */
op.l_start = 0; /* -"- */
@@ -190,7 +197,7 @@
if (IS_INVALID_HANDLE(m) || ACR_IOH_TYPE(mutex) != ACR_DT_MUTEX) {
return ACR_EINVAL;
- }
+ }
op.l_whence = SEEK_SET; /* from current point */
op.l_start = 0; /* -"- */
op.l_len = 0; /* until end of file */
@@ -220,7 +227,7 @@
if (IS_INVALID_HANDLE(m) || ACR_IOH_TYPE(mutex) != ACR_DT_MUTEX) {
return ACR_EINVAL;
- }
+ }
m->locked = 0;
op.l_whence = SEEK_SET; /* from current point */
@@ -245,7 +252,7 @@
if (IS_INVALID_HANDLE(m) || ACR_IOH_TYPE(mutex) != ACR_DT_MUTEX) {
return ACR_EINVAL;
- }
+ }
if (!(perms & ACR_FPROT_GSETID))
gid = -1;
if (fchown(m->filedes, uid, gid) < 0) {
@@ -263,6 +270,17 @@
return acr_ioh_close(mutex);
}
+ACR_DECLARE(int) ACR_ProcMutexRemove(JNIEnv *_E, const acr_pchar_t *filename)
+{
+
+ if (unlink(filename)) {
+ ACR_THROW_IO_ERROR();
+ return ACR_GET_OS_ERROR();
+ }
+ else
+ return ACR_SUCCESS;
+}
+
ACR_CLASS_LDEF(Mutex)
{
int rv;