From: James M. <ja...@jw...> - 2013-01-31 00:58:01
|
On 30/01/13 James Morris <ja...@jw...> wrote: >On 30/01/13 Pavel Labath <pa...@ce...> wrote: >>On 30/01/13 14:34, James Morris wrote: >>> On 30/01/13 James Morris <ja...@jw...> wrote: >>>> Hi, >>>> >>>> Just sent a pull request on github for my latest changes. >>>> >>>> Aside from the omission of 'experimental' time data, and server >>>> control (stop/start/etc), pretty much all data is available. >>>> >>>> Added documentation and fixed problems with conkyrc reload. >>>> >>>> cheers, >>>> james. >>> >>> >>> hmmm, just found an odd problem with code like this within lua: >>> >>> if conky_parse("${if_jack_active}1${else}0${endif}") == "1" >>> then print("jack active") >>> else >>> print("jack not active") >>> end >>> >>> init_jack is called on every update but my flag to prevent >>> re-registering of the jack client seems to be ignored when called >>> from lua. >>> >>> think this is what stumped me the other week giving me cold feet >>> from the prospect it might be a threads issue... is lua processing >>> done in a different thread or something? or is my logic for >>> preventing re-registration of conky as a jack client flawed???? >>> >>> james. >>> >> >>Hi, >> >>I've tried to wrap my head around your code, but I cannot seem to >>figure out what it is doing. Maybe you could give a rough outline of >>what it is supposed to do. Especially, focus on the jack_close() call, >>because I think there may be a problem there. You seem to the close >>when *any* jack object is destroyed (as opposed to the *last* object). >>This could be the source of your troubles since the $if_jack_active >>object is destroyed as soon as conky_parse terminates. (at least I >>think it is, feel free to verify). > >Ah yes, that makes a lot of sense, I hadn't really delved in deep to >look at what is happening with the creation of conky objects. I'll >use a counter incremented on calls to jack_init and decremented >in jack_close, and only call jack_client_close when the counter reaches >zero (unless conky already has a mechanism for this?). > > >> >>Also I find that semaphore thingy quite strange. What exactly are you >>trying to achieve there? > >My grasp of multi-threading is a bit weak, so that's just something >I've taken from another project[1]. jack_shutdown_cb() is called by >JACK[2] never by conky so the semaphore is there to cause this >communication between different process threads to hopefully happen in >a thread safe manner! > > >HTH, >James. > >[1] >https://github.com/danmbox/jack-file/blob/master/csrc/file2jack.c#L634 > >[2] >http://jackaudio.org/files/docs/html/group__ClientCallbacks.html#ga417b907ee02efbe00f5e9a2f4d202599 > I'll explain a little bit about JACK here - I don't know how much you know about it so bear with me. First thing, we can't assume JACK will be running or not running or stay in either of those states (probably similar to mpd/xmms etc). The on_shutdown callback might be called when the user stops the JACK server - which is certainly not uncommon. Or sometimes if the client is taking too much load and not keeping up with real-time requirements, JACK will 'zombify' the client and kick it out of the processing graph (ie heavy real-time fx processing or huge multi-track recordings may cause such a thing). There are a few other reasons too. Since many of the functions we're using to obtain information about the JACK server require registration as a client we need to know when we no longer are a JACK client otherwise we'll get the dreaded sig-segv - which considering conky's main task is NOT as a JACK client, would be poor going. I've just made a further commit to my conky fork, have added a counter to prevent the action I previously described and it works as we suspected. Have left a few printf's in place so you can see what's going on (if you run it and have jack?).. this might help: TEXT #------------------------------------------------- ${if_jack_active} ${color 00cdcd}jack cpu load: ${goto 100}${color 00af00}${jack_cpu_load}% ${color 00cdcd}jack buffer size: ${goto 100}${color 00af00}${jack_buffer_size} ${color 00cdcd}jack sample rate: ${goto 100}${color 00af00}${jack_sample_rate} ${color cd0000}jack xruns: ${goto 100}${color af0000}${jack_xruns}${else} ${color 00cdcd}jack cpu load: ${goto 100}${color af0000}-- ${color 00cdcd}jack buffer size: ${goto 100}${color af0000}-- ${color 00cdcd}jack sample rate: ${goto 100}${color af0000}-- ${color cd0000}jack xruns: ${goto 100}${color af0000}0${endif} ${if_jack_rolling}${color 00ff00}Rolling${else}${color ff0000}Stopped${endif} ${if_jack_bbt} ${jack_beat_type}/${jack_beats_per_bar} ${jack_bpm}bpm BBT:${jack_bar}:${jack_beat}:${jack_tick}${endif} ${jack_frame} ${jack_hour}:${jack_min}:${jack_sec} cheers, james. |