Browse Source

Cleanup Windows code.

git-svn-id: http://subversion.jackaudio.org/jack/jack2/trunk/jackmp@4700 0c269be4-1314-0410-8aa9-9f06e86f4224
tags/1.9.9.5
sletz 13 years ago
parent
commit
f59d570665
2 changed files with 47 additions and 30 deletions
  1. +40
    -26
      windows/JackWinNamedPipeServerChannel.cpp
  2. +7
    -4
      windows/JackWinNamedPipeServerChannel.h

+ 40
- 26
windows/JackWinNamedPipeServerChannel.cpp View File

@@ -39,7 +39,7 @@ HANDLE JackClientPipeThread::fMutex = NULL; // Never released....
// fRefNum = -1 correspond to already removed client // fRefNum = -1 correspond to already removed client


JackClientPipeThread::JackClientPipeThread(JackWinNamedPipeClient* pipe) JackClientPipeThread::JackClientPipeThread(JackWinNamedPipeClient* pipe)
:fPipe(pipe), fServer(NULL), fDecoder(NULL), fThread(this), fRefNum(0)
:fPipe(pipe), fDecoder(NULL), fServer(NULL), fThread(this), fRefNum(0)
{ {
// First one allocated the static fMutex // First one allocated the static fMutex
if (fMutex == NULL) { if (fMutex == NULL) {
@@ -53,17 +53,24 @@ JackClientPipeThread::~JackClientPipeThread()
delete fPipe; delete fPipe;
} }


bool JackClientPipeThread::IsRunning()
{
return (fRefNum >= 0);
//return (fRefNum >= GetEngineControl()->fDriverNum);
}


int JackClientPipeThread::Open(JackServer* server) // Open the Server/Client connection int JackClientPipeThread::Open(JackServer* server) // Open the Server/Client connection
{ {
// Start listening // Start listening
if (fThread.Start() != 0) { if (fThread.Start() != 0) {
jack_error("Cannot start Jack server listener\n"); jack_error("Cannot start Jack server listener\n");
return -1; return -1;
} else {
fDecoder = new JackRequestDecoder(server, this);
fServer = server;
return 0;
} }

fDecoder = new JackRequestDecoder(server, this);
fServer = server;
return 0;
} }


void JackClientPipeThread::Close() // Close the Server/Client connection void JackClientPipeThread::Close() // Close the Server/Client connection
@@ -79,7 +86,7 @@ void JackClientPipeThread::Close() // Close
fPipe->Close(); fPipe->Close();
fRefNum = -1; fRefNum = -1;


//delete fDecoder;
delete fDecoder;
fDecoder = NULL; fDecoder = NULL;
} }


@@ -520,13 +527,13 @@ int JackWinNamedPipeServerChannel::Open(const char* server_name, JackServer* ser
snprintf(fServerName, sizeof(fServerName), server_name); snprintf(fServerName, sizeof(fServerName), server_name);


// Needed for internal connection from JackWinNamedPipeServerNotifyChannel object // Needed for internal connection from JackWinNamedPipeServerNotifyChannel object
if (fRequestListenPipe.Bind(jack_server_dir, server_name, 0) < 0) {
if (ClientListen()) {
fServer = server;
return 0;
} else {
jack_error("JackWinNamedPipeServerChannel::Open : cannot create result listen pipe"); jack_error("JackWinNamedPipeServerChannel::Open : cannot create result listen pipe");
return -1; return -1;
} }

fServer = server;
return 0;
} }


void JackWinNamedPipeServerChannel::Close() void JackWinNamedPipeServerChannel::Close()
@@ -557,37 +564,44 @@ void JackWinNamedPipeServerChannel::Stop()
fThread.Kill(); fThread.Kill();
} }



bool JackWinNamedPipeServerChannel::Init() bool JackWinNamedPipeServerChannel::Init()
{ {
jack_log("JackWinNamedPipeServerChannel::Init"); jack_log("JackWinNamedPipeServerChannel::Init");
JackWinNamedPipeClient* pipe;

// Accept first client, that is the JackWinNamedPipeServerNotifyChannel object // Accept first client, that is the JackWinNamedPipeServerNotifyChannel object
if ((pipe = fRequestListenPipe.AcceptClient()) == NULL) {
jack_error("JackWinNamedPipeServerChannel::Init : cannot connect pipe");
return ClientAccept();
}

bool JackWinNamedPipeServerChannel::ClientListen()
{
if (fRequestListenPipe.Bind(jack_server_dir, fServerName, 0) < 0) {
jack_error("JackWinNamedPipeServerChannel::ClientListen : cannot create result listen pipe");
return false; return false;
} else { } else {
ClientAdd(pipe);
return true; return true;
} }
} }


bool JackWinNamedPipeServerChannel::Execute()
bool JackWinNamedPipeServerChannel::ClientAccept()
{ {
JackWinNamedPipeClient* pipe;
JackWinNamedPipeClient* pipe;


if (fRequestListenPipe.Bind(jack_server_dir, fServerName, 0) < 0) {
jack_error("JackWinNamedPipeServerChannel::Open : cannot create result listen pipe");
if ((pipe = fRequestListenPipe.AcceptClient()) == NULL) {
jack_error("JackWinNamedPipeServerChannel::ClientAccept : cannot connect pipe");
return false; return false;
} else {
ClientAdd(pipe);
return true;
} }
}


if ((pipe = fRequestListenPipe.AcceptClient()) == NULL) {
jack_error("JackWinNamedPipeServerChannel::Open : cannot connect pipe");
return false;
bool JackWinNamedPipeServerChannel::Execute()
{
if (!ClientListen()) {
return false;
} }


ClientAdd(pipe);
return true;
return ClientAccept();
} }


void JackWinNamedPipeServerChannel::ClientAdd(JackWinNamedPipeClient* pipe) void JackWinNamedPipeServerChannel::ClientAdd(JackWinNamedPipeClient* pipe)
@@ -596,11 +610,11 @@ void JackWinNamedPipeServerChannel::ClientAdd(JackWinNamedPipeClient* pipe)
std::list<JackClientPipeThread*>::iterator it = fClientList.begin(); std::list<JackClientPipeThread*>::iterator it = fClientList.begin();
JackClientPipeThread* client; JackClientPipeThread* client;


jack_info("ClientAdd size %ld", fClientList.size());
jack_info("JackWinNamedPipeServerChannel::ClientAdd size %ld", fClientList.size());


while (it != fClientList.end()) { while (it != fClientList.end()) {
client = *it; client = *it;
jack_info("Remove dead client = %x running = %ld", client, client->IsRunning());
jack_info("Remove dead client = %x running = %ld ref = %d", client, client->IsRunning(), client->GetRefNum());
if (client->IsRunning()) { if (client->IsRunning()) {
it++; it++;
} else { } else {


+ 7
- 4
windows/JackWinNamedPipeServerChannel.h View File

@@ -70,10 +70,10 @@ class JackClientPipeThread : public JackRunnableInterface, public JackClientHand
bool Execute(); bool Execute();


// To be used for find out if the object can be deleted // To be used for find out if the object can be deleted
bool IsRunning()
{
return (fRefNum >= 0);
}
bool IsRunning();
int GetRefNum() { return fRefNum; }
}; };


/*! /*!
@@ -94,6 +94,9 @@ class JackWinNamedPipeServerChannel : public JackRunnableInterface


void ClientAdd(JackWinNamedPipeClient* pipe); void ClientAdd(JackWinNamedPipeClient* pipe);


bool ClientListen();
bool ClientAccept();

public: public:


JackWinNamedPipeServerChannel(); JackWinNamedPipeServerChannel();


Loading…
Cancel
Save