summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--jackd/engine.c6
-rw-r--r--libjack/shm.c37
2 files changed, 28 insertions, 15 deletions
diff --git a/jackd/engine.c b/jackd/engine.c
index 3029ab3..693bf61 100644
--- a/jackd/engine.c
+++ b/jackd/engine.c
@@ -1252,6 +1252,8 @@ handle_new_client (jack_engine_t *engine, int client_fd)
jack_client_internal_t *client;
jack_client_connect_request_t req;
jack_client_connect_result_t res;
+
+ res.status = 0;
if (read (client_fd, &req, sizeof (req)) != sizeof (req)) {
jack_error ("cannot read connection request from client");
@@ -1261,11 +1263,11 @@ handle_new_client (jack_engine_t *engine, int client_fd)
if (!req.load) {
return handle_unload_client (engine, client_fd, &req);
}
-
+
if ((client = setup_client (engine, client_fd, &req, &res)) == NULL) {
return -1;
}
-
+
if (write (client->request_fd, &res, sizeof (res)) != sizeof (res)) {
jack_error ("cannot write connection response to client");
jack_client_delete (engine, client);
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);