Re: [Jack-Devel] jack2 turned verbose

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On 06/01/2012 03:58 PM, Robin Gareus wrote:
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

I've had a closer look at this and this patch seems to be working for me (their's no equivalent bool in jack_driver_param_value_t)

diff -Nurp '-x*~' jack-1.9.8.orig/common/JackControlAPI.cpp jack-1.9.8/common/JackControlAPI.cpp --- jack-1.9.8.orig/common/JackControlAPI.cpp 2011-12-19 12:54:02.000000000 +0100
+++ jack-1.9.8/common/JackControlAPI.cpp	2012-06-04 21:57:59.264581780 +0200
@@ -246,7 +246,7 @@ jackctl_add_driver_parameters(
             break;
         case JackDriverParamBool:
             jackctl_type = JackParamBool;
-            jackctl_value.b = descriptor_ptr->value.i;
+            jackctl_value.b = (descriptor_ptr->value.i > 0);
             break;
         default:
jack_error("unknown driver parameter type %i", (int)descriptor_ptr->type);


_______________________________________________
Linux-audio-user mailing list
Linux-audio-user@xxxxxxxxxxxxxxxxxxxx
http://lists.linuxaudio.org/listinfo/linux-audio-user


[Index of Archives]     [Linux Sound]     [ALSA Users]     [Pulse Audio]     [ALSA Devel]     [Sox Users]     [Linux Media]     [Kernel]     [Photo Sharing]     [Gimp]     [Yosemite News]     [Linux Media]

  Powered by Linux