summaryrefslogtreecommitdiff
path: root/libjack/shm.c
diff options
context:
space:
mode:
authorletz <letz@0c269be4-1314-0410-8aa9-9f06e86f4224>2004-03-26 08:28:06 +0000
committerletz <letz@0c269be4-1314-0410-8aa9-9f06e86f4224>2004-03-26 08:28:06 +0000
commited9f6b65b7decadba75bac9626290c513c533cab (patch)
tree22ff00a69f0747eaf624c7160a018dfbec47d860 /libjack/shm.c
parentdfef6adff35f86c05b50116a7c1bf1616f3861df (diff)
downloadjack1-ed9f6b65b7decadba75bac9626290c513c533cab.tar.gz
Fix for Darwin/MacOSX
git-svn-id: svn+ssh://jackaudio.org/trunk/jack@675 0c269be4-1314-0410-8aa9-9f06e86f4224
Diffstat (limited to 'libjack/shm.c')
-rw-r--r--libjack/shm.c37
1 files changed, 24 insertions, 13 deletions
diff --git a/libjack/shm.c b/libjack/shm.c
index f1fdea9..89878b3 100644
--- a/libjack/shm.c
+++ b/libjack/shm.c
@@ -141,6 +141,7 @@ jack_initialize_shm (void)
jack_shmsize_t size;
int new_registry = FALSE;
int ret = -1;
+ int perm;
if (jack_shm_registry != NULL) {
return 0;
@@ -154,16 +155,20 @@ jack_initialize_shm (void)
size = sizeof (jack_shm_registry_t) * MAX_SHM_ID;
jack_shm_lock_registry ();
+
+ perm = O_RDWR;
/* try without O_CREAT to see if it already exists */
-
- if ((shm_fd = shm_open ("/jack-shm-registry", O_RDWR, 0666)) < 0) {
+
+ if ((shm_fd = shm_open ("/jack-shm-registry", perm, 0666)) < 0) {
if (errno == ENOENT) {
+
+ perm = O_RDWR|O_CREAT;
/* it doesn't exist, so create it */
- if ((shm_fd = shm_open ("/jack-shm-registry", O_RDWR|O_CREAT, 0666)) < 0) {
+ if ((shm_fd = shm_open ("/jack-shm-registry", perm, 0666)) < 0) {
jack_error ("cannot create shm registry segment (%s)",
strerror (errno));
goto out;
@@ -178,12 +183,14 @@ jack_initialize_shm (void)
}
}
- if (ftruncate (shm_fd, size) < 0) {
- jack_error ("cannot set size of engine shm registry "
- "(%s)", strerror (errno));
- goto out;
+ if (perm & O_CREAT) {
+ if (ftruncate (shm_fd, size) < 0) {
+ jack_error ("cannot set size of engine shm registry 1"
+ "(%s)", strerror (errno));
+ goto out;
+ }
}
-
+
if ((jack_shm_registry = mmap (0, size, PROT_READ|PROT_WRITE, MAP_SHARED, shm_fd, 0)) == MAP_FAILED) {
jack_error ("cannot mmap shm registry segment (%s)",
strerror (errno));
@@ -232,17 +239,21 @@ jack_shmalloc (const char *shm_name, jack_shmsize_t size, jack_shm_info_t* si)
if ((registry = jack_get_free_shm_info ()) == NULL) {
return -1;
}
+
+ int perm = O_RDWR|O_CREAT;
if ((shm_fd = shm_open (shm_name, O_RDWR|O_CREAT, 0666)) < 0) {
jack_error ("cannot create shm segment %s (%s)", shm_name,
strerror (errno));
return -1;
}
-
- if (ftruncate (shm_fd, size) < 0) {
- jack_error ("cannot set size of engine shm registry "
- "(%s)", strerror (errno));
- return -1;
+
+ if (perm & O_CREAT) {
+ if (ftruncate (shm_fd, size) < 0) {
+ jack_error ("cannot set size of engine shm registry 0"
+ "(%s)", strerror (errno));
+ return -1;
+ }
}
close (shm_fd);