[alsa-devel] [PATCH - pcm_jack plugin 1/1] Restore PID to jack client name when not specified explicitly
Takashi Iwai
tiwai at suse.de
Tue Aug 12 16:26:55 CEST 2014
At Fri, 8 Aug 2014 14:31:06 -0700,
branan at gmail.com wrote:
>
> From: Branan Purvine-Riley <branan at gmail.com>
>
> Commit 14190cd8 added a facility to explicitly name Jack clients with
> a 'name' option, but did so in a way that was not fully
> backwards-compatible with older versions of the alsa-plugins. There
> were two issues:
>
> 1. Re-using the magical "name" variable, which comes preloaded with
> the name of the PCM
>
> 2. The code assumed snd_config_get_string sets a variable to NULL if
> the config entry does not exist. Instead, this function leaves the
> variable unchanged.
>
> The result of these two errors meant that the PCM name would be
> treated as if it were a user-defined name, and the old code which
> embedded the PID would never be run
>
> This code uses a completely new variable to store the explicitly-set
> client name, so that the two code paths no longer collide.
>
> Signed-off-by: Branan Purvine-Riley <branan at gmail.com>
Thanks, applied.
Takashi
>
> diff --git a/jack/pcm_jack.c b/jack/pcm_jack.c
> index f5b7129..33f87b1 100644
> --- a/jack/pcm_jack.c
> +++ b/jack/pcm_jack.c
> @@ -372,6 +372,7 @@ static int make_nonblock(int fd)
> }
>
> static int snd_pcm_jack_open(snd_pcm_t **pcmp, const char *name,
> + const char* client_name,
> snd_config_t *playback_conf,
> snd_config_t *capture_conf,
> snd_pcm_stream_t stream, int mode)
> @@ -405,14 +406,14 @@ static int snd_pcm_jack_open(snd_pcm_t **pcmp, const char *name,
> return -EINVAL;
> }
>
> - if (name == NULL)
> + if (client_name == NULL)
> err = snprintf(jack_client_name, sizeof(jack_client_name),
> "alsa-jack.%s%s.%d.%d", name,
> stream == SND_PCM_STREAM_PLAYBACK ? "P" : "C",
> getpid(), num++);
> else
> err = snprintf(jack_client_name, sizeof(jack_client_name),
> - "%s", name);
> + "%s", client_name);
>
> if (err >= (int)sizeof(jack_client_name)) {
> fprintf(stderr, "%s: WARNING: JACK client name '%s' truncated to %d characters, might not be unique\n",
> @@ -470,6 +471,7 @@ SND_PCM_PLUGIN_DEFINE_FUNC(jack)
> snd_config_iterator_t i, next;
> snd_config_t *playback_conf = NULL;
> snd_config_t *capture_conf = NULL;
> + const char* client_name = NULL;
> int err;
>
> snd_config_for_each(i, next, conf) {
> @@ -480,7 +482,7 @@ SND_PCM_PLUGIN_DEFINE_FUNC(jack)
> if (strcmp(id, "comment") == 0 || strcmp(id, "type") == 0 || strcmp(id, "hint") == 0)
> continue;
> if (strcmp(id, "name") == 0) {
> - snd_config_get_string(n, &name);
> + snd_config_get_string(n, &client_name);
> continue;
> }
> if (strcmp(id, "playback_ports") == 0) {
> @@ -503,7 +505,7 @@ SND_PCM_PLUGIN_DEFINE_FUNC(jack)
> return -EINVAL;
> }
>
> - err = snd_pcm_jack_open(pcmp, name, playback_conf, capture_conf, stream, mode);
> + err = snd_pcm_jack_open(pcmp, name, client_name, playback_conf, capture_conf, stream, mode);
>
> return err;
> }
> --
> 2.0.4
>
More information about the Alsa-devel
mailing list