diff options
-rw-r--r-- | .gitmodules | 10 | ||||
-rw-r--r-- | configure.ac | 14 | ||||
-rw-r--r-- | drivers/alsa_midi/port.c | 20 | ||||
-rw-r--r-- | drivers/dummy/dummy_driver.c | 2 | ||||
-rw-r--r-- | drivers/dummy/dummy_driver.h | 2 | ||||
m--------- | example-clients | 0 | ||||
-rw-r--r-- | include/internal.h | 2 | ||||
m--------- | jack | 0 | ||||
-rw-r--r-- | jackd/engine.c | 12 | ||||
-rw-r--r-- | jackd/jackd.c | 3 | ||||
-rw-r--r-- | libjack/client.c | 46 | ||||
m--------- | tools | 0 |
12 files changed, 71 insertions, 40 deletions
diff --git a/.gitmodules b/.gitmodules index b805b45..24410fa 100644 --- a/.gitmodules +++ b/.gitmodules @@ -1,9 +1,9 @@ +[submodule "example-clients"] + path = example-clients + url = https://github.com/jackaudio/example-clients [submodule "jack"] path = jack - url = git://github.com/jackaudio/headers.git + url = https://github.com/jackaudio/headers [submodule "tools"] path = tools - url = git://github.com/jackaudio/tools.git -[submodule "example-clients"] - path = example-clients - url = git://github.com/jackaudio/example-clients.git + url = https://github.com/jackaudio/tools diff --git a/configure.ac b/configure.ac index 49cf862..85e32d8 100644 --- a/configure.ac +++ b/configure.ac @@ -285,6 +285,20 @@ AC_CHECK_FUNC(clock_gettime, ]) ) +AC_CHECK_FUNC(clock_nanosleep, + [ + AC_DEFINE(HAVE_CLOCK_NANOSLEEP,0,"Whether or not clock_nanosleep can be found in system libraries") + ], + # + # if not found, check librt specifically + # + AC_CHECK_LIB(rt, clock_nanosleep, + [ + AC_DEFINE(HAVE_CLOCK_NANOSLEEP,1,"Whether or not clock_nanosleep can be found in system libraries") + OS_LDFLAGS="$OS_LDFLAGS -lrt" + ]) +) + # should we use mlockall() on this platform? if test "x$JACK_DO_NOT_MLOCK" = "x"; then AC_CHECK_HEADER(sys/mman.h, diff --git a/drivers/alsa_midi/port.c b/drivers/alsa_midi/port.c index 6f1cb04..d217310 100644 --- a/drivers/alsa_midi/port.c +++ b/drivers/alsa_midi/port.c @@ -111,34 +111,36 @@ a2j_port_fill_name (struct a2j_port * port_ptr, int dir, snd_seq_client_info_t * /* entire client name is part of the port name so don't replicate it */ snprintf (port_ptr->name, sizeof(port_ptr->name), - "[%d] %s %s", + "[%d:%d] %s (%s)", snd_seq_client_info_get_client (client_info_ptr), + snd_seq_port_info_get_port (port_info_ptr), port_name, - (dir == A2J_PORT_CAPTURE ? "in" : "out")); + (dir == A2J_PORT_CAPTURE ? "out" : "in")); } else { snprintf (port_ptr->name, sizeof(port_ptr->name), - "%s [%d] %s %s", - client_name, + "[%d:%d] %s %s (%s)", snd_seq_client_info_get_client (client_info_ptr), + snd_seq_port_info_get_port (port_info_ptr), + client_name, port_name, - (dir == A2J_PORT_CAPTURE ? "in" : "out")); + (dir == A2J_PORT_CAPTURE ? "out" : "in")); } } else { if (strstr (port_name, client_name) == port_name) { /* entire client name is part of the port name so don't replicate it */ snprintf (port_ptr->name, sizeof(port_ptr->name), - "%s %s", + "%s (%s)", port_name, - (dir == A2J_PORT_CAPTURE ? "in" : "out")); + (dir == A2J_PORT_CAPTURE ? "out" : "in")); } else { snprintf (port_ptr->name, sizeof(port_ptr->name), - "%s %s %s", + "%s %s (%s)", client_name, snd_seq_port_info_get_name (port_info_ptr), - (dir == A2J_PORT_CAPTURE ? "in" : "out")); + (dir == A2J_PORT_CAPTURE ? "out" : "in")); } } diff --git a/drivers/dummy/dummy_driver.c b/drivers/dummy/dummy_driver.c index d414cb1..b8e1b9c 100644 --- a/drivers/dummy/dummy_driver.c +++ b/drivers/dummy/dummy_driver.c @@ -73,7 +73,7 @@ FakeVideoSync ( dummy_driver_t *driver ) } } -#ifdef HAVE_CLOCK_GETTIME +#if defined(HAVE_CLOCK_GETTIME) && defined(HAVE_CLOCK_NANOSLEEP) static inline unsigned long long ts_to_nsec (struct timespec ts) { return ts.tv_sec * 1000000000LL + ts.tv_nsec; diff --git a/drivers/dummy/dummy_driver.h b/drivers/dummy/dummy_driver.h index 296f027..4daf182 100644 --- a/drivers/dummy/dummy_driver.h +++ b/drivers/dummy/dummy_driver.h @@ -43,7 +43,7 @@ struct _dummy_driver { jack_nframes_t period_size; unsigned long wait_time; -#ifdef HAVE_CLOCK_GETTIME +#if defined(HAVE_CLOCK_GETTIME) && defined(HAVE_CLOCK_NANOSLEEP) struct timespec next_wakeup; #else jack_time_t next_time; diff --git a/example-clients b/example-clients -Subproject e74323c535876abca9a2293bd2ca426a3b91ff8 +Subproject 7fa089095c81e81dacd2554ae3184acc7f2d58e diff --git a/include/internal.h b/include/internal.h index 5a14237..e3574bd 100644 --- a/include/internal.h +++ b/include/internal.h @@ -509,7 +509,7 @@ extern jack_client_t *jack_client_alloc_internal(jack_client_control_t*, /* internal clients call this. it's defined in jack/engine.c */ void handle_internal_client_request(jack_control_t*, jack_request_t*); -extern char *jack_tmpdir; +extern const char *jack_get_tmpdir(void); extern char *jack_user_dir(void); diff --git a/jack b/jack -Subproject a2536c8b348bbfb21ec53db901e7992d7ffef47 +Subproject 07f1ecf1ce119d861ec631cb4a6a81a1ab1e565 diff --git a/jackd/engine.c b/jackd/engine.c index c6b2e60..365a29a 100644 --- a/jackd/engine.c +++ b/jackd/engine.c @@ -227,16 +227,22 @@ make_socket_subdirectories (const char *server_name) { struct stat statbuf; char server_dir[PATH_MAX + 1] = ""; + const char *tmpdir = jack_get_tmpdir (); + + if (tmpdir == NULL) { + jack_error ("Unable to get tmpdir in engine"); + return -1; + } /* check tmpdir directory */ - if (stat (jack_tmpdir, &statbuf)) { + if (stat (tmpdir, &statbuf)) { jack_error ("cannot stat() %s (%s)\n", - jack_tmpdir, strerror (errno)); + tmpdir, strerror (errno)); return -1; } else { if (!S_ISDIR (statbuf.st_mode)) { jack_error ("%s exists, but is not a directory!\n", - jack_tmpdir); + tmpdir); return -1; } } diff --git a/jackd/jackd.c b/jackd/jackd.c index 0faae93..90fb38f 100644 --- a/jackd/jackd.c +++ b/jackd/jackd.c @@ -812,7 +812,8 @@ main (int argc, char *argv[]) case 'l': /* special flag to allow libjack to determine jackd's idea of where tmpdir is */ - printf ("%s\n", jack_tmpdir); + printf("%s\n", DEFAULT_TMP_DIR); + exit (0); case 'I': diff --git a/libjack/client.c b/libjack/client.c index 34e8b09..7724868 100644 --- a/libjack/client.c +++ b/libjack/client.c @@ -119,11 +119,10 @@ init_cpu () #endif /* USE_DYNSIMD */ -char *jack_tmpdir = DEFAULT_TMP_DIR; - -static int +const char * jack_get_tmpdir () { + static char tmpdir[PATH_MAX + 1] = ""; FILE* in; size_t len; char buf[PATH_MAX + 2]; /* allow tmpdir to live anywhere, plus newline, plus null */ @@ -131,6 +130,11 @@ jack_get_tmpdir () char *pathcopy; char *p; + /* return tmpdir if set */ + if (tmpdir[0] != '\0') { + return tmpdir; + } + /* some implementations of popen(3) close a security loophole by resetting PATH for the exec'd command. since we *want* to use the user's PATH setting to locate jackd, we have to @@ -138,13 +142,13 @@ jack_get_tmpdir () */ if ((pathenv = getenv ("PATH")) == 0) { - return -1; + return NULL; } /* don't let strtok(3) mess with the real environment variable */ if ((pathcopy = strdup (pathenv)) == NULL) { - return -1; + return NULL; } p = strtok (pathcopy, ":"); @@ -169,13 +173,13 @@ jack_get_tmpdir () if (p == NULL) { /* no command successfully started */ free (pathcopy); - return -1; + return NULL; } if (fgets (buf, sizeof(buf), in) == NULL) { pclose (in); free (pathcopy); - return -1; + return NULL; } len = strlen (buf); @@ -184,21 +188,16 @@ jack_get_tmpdir () /* didn't get a whole line */ pclose (in); free (pathcopy); - return -1; - } - - if ((jack_tmpdir = (char*)malloc (len)) == NULL) { - free (pathcopy); - return -1; + return NULL; } - memcpy (jack_tmpdir, buf, len - 1); - jack_tmpdir[len - 1] = '\0'; + memcpy (tmpdir, buf, len - 1); + tmpdir[len - 1] = '\0'; pclose (in); free (pathcopy); - return 0; + return tmpdir; } void @@ -1260,7 +1259,7 @@ jack_client_open_aux (const char *client_name, /* External clients need to know where the tmpdir used for communication with the server lives */ - if (jack_get_tmpdir ()) { + if (jack_get_tmpdir () == NULL) { *status |= JackFailure; jack_messagebuffer_exit (); return NULL; @@ -1458,15 +1457,24 @@ char * jack_user_dir (void) { static char user_dir[PATH_MAX + 1] = ""; + const char *tmpdir; /* format the path name on the first call */ if (user_dir[0] == '\0') { + tmpdir = jack_get_tmpdir (); + + /* previous behavior of jack_tmpdir, should be changed later */ + if (tmpdir == NULL) { + jack_error ("Unable to get tmpdir in user dir"); + tmpdir = DEFAULT_TMP_DIR; + } + if (getenv ("JACK_PROMISCUOUS_SERVER")) { snprintf (user_dir, sizeof(user_dir), "%s/jack", - jack_tmpdir); + tmpdir); } else { snprintf (user_dir, sizeof(user_dir), "%s/jack-%d", - jack_tmpdir, getuid ()); + tmpdir, getuid ()); } } diff --git a/tools b/tools -Subproject 8e140b72de0231d129c6006db969f1dba4f1486 +Subproject 02ddc6ea2f16e41326c675b1bcfcd6335390b88 |