Re: [Jack-Devel] A couple of questions about Jackdmp

PrevNext  Index
DateMon, 18 Apr 2011 10:32:07 +0100
From John Emmas <[hidden] at tiscali dot co dot uk>
To[hidden] at lists dot jackaudio dot org
In-Reply-ToStéphane Letz Re: [Jack-Devel] A couple of questions about Jackdmp
Follow-UpStéphane Letz Re: [Jack-Devel] A couple of questions about Jackdmp
On 18 Apr 2011, at 09:38, Stéphane Letz wrote:

> 
>> In recent mailings I've noticed some references to the VC++10 runtime and redistributables.
> 
> Only to compile JackRouter ASIO driver, not for jack2 itself.
> 
Ah - that's the bit I hadn't realised.  Looking through my code though, although I modified the jackdmp source quite extensively, the vast majority of my changes seem to be for accommodating Cygwin rather than VC++.  For example wherever the code says this:-

#ifdef WIN32

I've needed to change it to this:-

#if (defined(WIN32) && !defined(__CYGWIN__))


With regard to Visual C++ the only major change I needed to implement was to use the threading library 'pthread_win32' as opposed to regular pthread.  The other changes seem to be very simple things (redefining Int64 to be 'long long' for example).


>> 
>> Q2.  If I understand Jackdmp's command line parameters, the parameter "-T" makes Jackdmp "temporary".  I think this means that if a client launches Jackdmp using the "-T" parameter, Jackdmp should unload itself when there are no more clients connected.  Have I understood that correctly?
> 
> Yes.
> 
>> It's the only thing that doesn't seem to work in my Windows build so I'd like to figure out where I should start looking for the problem.
>> 
I'm glad I looked into this.  While browsing through the source I came across this function in JackEngine.cpp:-

void JackEngine::ReleaseRefnum(int ref)
{
    fClientTable[ref] = NULL;

    if (fEngineControl->fTemporary) {
        int I;

        for (I = REAL_REFNUM; I < CLIENT_NUM; I++) {
            if (fClientTable[I])
                break;
        }

        if (I == CLIENT_NUM) {
            // last client and temporay case: quit the server
            jack_log("JackEngine::ReleaseRefnum server quit");
            fEngineControl->fTemporary = false;

#ifndef WIN32
            exit(0);
#endif
        }
    }
}

I assume that if I removed  #ifndef WIN32  in the above code, my server would magically unload itself when there are no more clients left - but I'm curious to know why the condition was ever there.  Is it still present in the latest code and/or can anyone remember why it's needed?

John
PrevNext  Index

1303119157.31846_0.ltw:2,a <E2BE758B-0597-4D61-969D-3CFF4B0D7C8A at tiscali dot co dot uk>