Browse Source

Fix for Darwin/MacOSX

git-svn-id: svn+ssh://jackaudio.org/trunk/jack@675 0c269be4-1314-0410-8aa9-9f06e86f4224
tags/0.109.0
letz 21 years ago
parent
commit
ed9f6b65b7
2 changed files with 28 additions and 15 deletions
  1. +4
    -2
      jackd/engine.c
  2. +24
    -13
      libjack/shm.c

+ 4
- 2
jackd/engine.c View File

@@ -1252,6 +1252,8 @@ handle_new_client (jack_engine_t *engine, int client_fd)
jack_client_internal_t *client; jack_client_internal_t *client;
jack_client_connect_request_t req; jack_client_connect_request_t req;
jack_client_connect_result_t res; jack_client_connect_result_t res;
res.status = 0;


if (read (client_fd, &req, sizeof (req)) != sizeof (req)) { if (read (client_fd, &req, sizeof (req)) != sizeof (req)) {
jack_error ("cannot read connection request from client"); 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) { if (!req.load) {
return handle_unload_client (engine, client_fd, &req); return handle_unload_client (engine, client_fd, &req);
} }
if ((client = setup_client (engine, client_fd, &req, &res)) == NULL) { if ((client = setup_client (engine, client_fd, &req, &res)) == NULL) {
return -1; return -1;
} }
if (write (client->request_fd, &res, sizeof (res)) != sizeof (res)) { if (write (client->request_fd, &res, sizeof (res)) != sizeof (res)) {
jack_error ("cannot write connection response to client"); jack_error ("cannot write connection response to client");
jack_client_delete (engine, client); jack_client_delete (engine, client);


+ 24
- 13
libjack/shm.c View File

@@ -141,6 +141,7 @@ jack_initialize_shm (void)
jack_shmsize_t size; jack_shmsize_t size;
int new_registry = FALSE; int new_registry = FALSE;
int ret = -1; int ret = -1;
int perm;


if (jack_shm_registry != NULL) { if (jack_shm_registry != NULL) {
return 0; return 0;
@@ -154,16 +155,20 @@ jack_initialize_shm (void)
size = sizeof (jack_shm_registry_t) * MAX_SHM_ID; size = sizeof (jack_shm_registry_t) * MAX_SHM_ID;


jack_shm_lock_registry (); jack_shm_lock_registry ();
perm = O_RDWR;


/* try without O_CREAT to see if it already exists */ /* 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) { if (errno == ENOENT) {
perm = O_RDWR|O_CREAT;
/* it doesn't exist, so create it */ /* 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)", jack_error ("cannot create shm registry segment (%s)",
strerror (errno)); strerror (errno));
goto out; 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) { 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)", jack_error ("cannot mmap shm registry segment (%s)",
strerror (errno)); 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) { if ((registry = jack_get_free_shm_info ()) == NULL) {
return -1; return -1;
} }
int perm = O_RDWR|O_CREAT;


if ((shm_fd = shm_open (shm_name, O_RDWR|O_CREAT, 0666)) < 0) { if ((shm_fd = shm_open (shm_name, O_RDWR|O_CREAT, 0666)) < 0) {
jack_error ("cannot create shm segment %s (%s)", shm_name, jack_error ("cannot create shm segment %s (%s)", shm_name,
strerror (errno)); strerror (errno));
return -1; 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); close (shm_fd);


Loading…
Cancel
Save