summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.gitmodules10
-rw-r--r--configure.ac14
-rw-r--r--drivers/alsa_midi/port.c20
-rw-r--r--drivers/dummy/dummy_driver.c2
-rw-r--r--drivers/dummy/dummy_driver.h2
m---------example-clients0
-rw-r--r--include/internal.h2
m---------jack0
-rw-r--r--jackd/engine.c12
-rw-r--r--jackd/jackd.c3
-rw-r--r--libjack/client.c46
m---------tools0
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