[LAU] [Jack-Devel] jack2 turned verbose

David Adler david.jo.adler at gmail.com
Fri Jun 1 13:48:52 UTC 2012

On Fri, Jun 1, 2012 at 2:52 PM, Robin Gareus wrote:
> It might have to do with Arch's compiler[-flags] and how jack2 uses
> unions .. or scoping: JackGlobals vs Engine-Parameters.. although I
> don't have an explanation.. all seems good.

Compiler flags (for 32bit) are, (from unaltered /etc/makepkg.conf):
CXXFLAGS="-march=i686 -mtune=generic -O2 -pipe -fstack-protector
--param=ssp-buffer-size=4 -D_FORTIFY_SOURCE=2"

> A hunch: it could be caused by using 'server_ptr->verbose.b' (a union)
> as boolean. The sever only checks "if (server_ptr->verbose.b)". The
> union itself comprises other uninitialized values that could make it
> evaluate to true (though it shouldn't, but maybe some compiler
> optimization casts it to (int) instead of (bool) )
> I know this is the '-users' list (I'm ccing jack-devel), but could
> someone who experiences the problem try to track it down?
> Basically just add a few printf()'s. Start at: common/JackControlAPI.cpp
> - line 926 - before the call to  "new JackServer(..)" add
>  printf("DEBUG verbose: %s\n",(server_ptr->verbose.b)?"on":"off");
> recompile, launch jackd. If it prints "verbose: on", sth is wrong with
> parameter initialization in main() or with using unions. If it's "off"
> the problem sits deeper:

DEBUG verbose: on

> add a line just after common/JackServer.cpp line 66
>  printf("DEBUG verbose2: %s\n",(JackGlobals::fVerbose)?"on":"off");
> ...

above, your line number didn't match exactly, so we seem to have
different versions (1.9.7 here). Thus, I wasn't exactly sure where to
add the prinf() and did the following:

    JackServerGlobals::fUserCount = 1;     // One user
    printf("DEBUG verbose2: %s\n",(JackGlobals::fVerbose)?"on":"off");
    JackGlobals::fVerbose = verbose;
    printf("DEBUG verbose3: %s\n",(JackGlobals::fVerbose)?"on":"off");

which prints:
DEBUG verbose2: off
DEBUG verbose3: on

> A crude test for the union() hunch would be to change
> common/JackControlAPI.h line 53:
>  replace
>  "union jackctl_parameter_value"
> with
>  "struct jackctl_parameter_value"
> and compile with '-fpermissive' like this:
>  CXXFLAGS="-fpermissive" ./waf  configure
>  ./waf

Again, mismatching line numbers. I assume you meant the line:
union jackctl_parameter_value verbose;

Changing that to struct fixes both issues I reported,
the verbose output and exit on last client close.

So we seem to be getting somewhere. Nice.

thanks Robin,

More information about the Linux-audio-user mailing list