Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 26 Sep 2008 23:27:11 +0100
From:      xorquewasp@googlemail.com
To:        freebsd-hackers@freebsd.org
Subject:   popen() in multithreaded program - hangs?
Message-ID:  <20080926222711.GA74003@logik.internal.network>

next in thread | raw e-mail | index | archive | help
I'm trying to write a client for the jack audio connection kit
(http://jackaudio.org), have hit an apparent bug and am not sure
who's at fault.

This is the client:

--

#include <jack/jack.h>
#include <err.h>

jack_port_t *input_port;
jack_port_t *output_port;
jack_client_t *client;

int
main (void)
{
  jack_status_t status;

  client = jack_client_open ("cdemo", JackNoStartServer, &status, "default");
  if (!client) errx (112, "client_open: could not");

  jack_client_close (client);
  return 0;
}

--

The jack_client_open() call never returns and the process can only be killed
with SIGKILL. Tracing execution in gdb shows that the hang occurs in the
popen() call in jack_get_tmpdir(), defined at client.c:114:

  http://trac.jackaudio.org/browser/trunk/jack/libjack/client.c

Is there a known issue with calling popen() in a multithreaded program? At
the point of that call, on my system, there are three running threads.

Any help/advice on how to resolve this problem would be appreciated.

xw



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20080926222711.GA74003>