Hi David, On 06/01/2012 03:48 PM, David Adler wrote: > 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, > d just a quick re: the line-numbers refered to git-head https://github.com/jackaudio/jack2/ currently 007cdc37142a It looks like it is indeed caused by using unions to check for /true/. "if ([bool/int/..]union) -> always true" But I'm at a loss what'd cause those issues and how to best fix it. Maybe someone else can take it from here. It should be sufficient info to file a bug report at https://github.com/jackaudio/jack2/issues best, robin _______________________________________________ Linux-audio-user mailing list Linux-audio-user@xxxxxxxxxxxxxxxxxxxx http://lists.linuxaudio.org/listinfo/linux-audio-user