version 1.103.10.20, 2006/07/19 16:58:52
|
version 1.103.10.22, 2006/07/21 18:17:51
|
|
|
PEGASUS_NAMESPACE_BEGIN | PEGASUS_NAMESPACE_BEGIN |
| |
static AtomicInt _connections(0); | static AtomicInt _connections(0); |
|
#ifdef PEGASUS_LOCALDOMAINSOCKET_DEBUG |
Mutex Monitor::_cout_mut; | Mutex Monitor::_cout_mut; |
|
#endif |
| |
#ifdef PEGASUS_OS_TYPE_WINDOWS | #ifdef PEGASUS_OS_TYPE_WINDOWS |
#define PIPE_INCREMENT 1 | #define PIPE_INCREMENT 1 |
|
|
_tickle_server_socket(-1), | _tickle_server_socket(-1), |
_tickle_peer_socket(-1) | _tickle_peer_socket(-1) |
{ | { |
|
#ifdef PEGASUS_LOCALDOMAINSOCKET_DEBUG |
{ | { |
AutoMutex automut(Monitor::_cout_mut); | AutoMutex automut(Monitor::_cout_mut); |
PEGASUS_STD(cout) << "Entering: Monitor::Monitor(): (tid:" << Uint32(pegasus_thread_self()) << ")" << PEGASUS_STD(endl); | PEGASUS_STD(cout) << "Entering: Monitor::Monitor(): (tid:" << Uint32(pegasus_thread_self()) << ")" << PEGASUS_STD(endl); |
} | } |
|
#endif |
int numberOfMonitorEntriesToAllocate = MAX_NUMBER_OF_MONITOR_ENTRIES; | int numberOfMonitorEntriesToAllocate = MAX_NUMBER_OF_MONITOR_ENTRIES; |
Socket::initializeInterface(); | Socket::initializeInterface(); |
_entries.reserveCapacity(numberOfMonitorEntriesToAllocate); | _entries.reserveCapacity(numberOfMonitorEntriesToAllocate); |
|
|
_MonitorEntry entry(0, 0, 0); | _MonitorEntry entry(0, 0, 0); |
_entries.append(entry); | _entries.append(entry); |
} | } |
|
#ifdef PEGASUS_LOCALDOMAINSOCKET_DEBUG |
{ | { |
AutoMutex automut(Monitor::_cout_mut); | AutoMutex automut(Monitor::_cout_mut); |
PEGASUS_STD(cout) << "Exiting: Monitor::Monitor(): (tid:" << Uint32(pegasus_thread_self()) << ")" << PEGASUS_STD(endl); | PEGASUS_STD(cout) << "Exiting: Monitor::Monitor(): (tid:" << Uint32(pegasus_thread_self()) << ")" << PEGASUS_STD(endl); |
} | } |
|
#endif |
} | } |
| |
Monitor::~Monitor() | Monitor::~Monitor() |
{ | { |
|
#ifdef PEGASUS_LOCALDOMAINSOCKET_DEBUG |
{ | { |
AutoMutex automut(Monitor::_cout_mut); | AutoMutex automut(Monitor::_cout_mut); |
PEGASUS_STD(cout) << "Entering: Monitor::~Monitor(): (tid:" << Uint32(pegasus_thread_self()) << ")" << PEGASUS_STD(endl); | PEGASUS_STD(cout) << "Entering: Monitor::~Monitor(): (tid:" << Uint32(pegasus_thread_self()) << ")" << PEGASUS_STD(endl); |
} | } |
|
#endif |
Tracer::trace(TRC_HTTP, Tracer::LEVEL4, "uninitializing interface"); | Tracer::trace(TRC_HTTP, Tracer::LEVEL4, "uninitializing interface"); |
| |
try{ | try{ |
|
|
Socket::uninitializeInterface(); | Socket::uninitializeInterface(); |
Tracer::trace(TRC_HTTP, Tracer::LEVEL4, | Tracer::trace(TRC_HTTP, Tracer::LEVEL4, |
"returning from monitor destructor"); | "returning from monitor destructor"); |
|
#ifdef PEGASUS_LOCALDOMAINSOCKET_DEBUG |
{ | { |
AutoMutex automut(Monitor::_cout_mut); | AutoMutex automut(Monitor::_cout_mut); |
PEGASUS_STD(cout) << "Exiting: Monitor::~Monitor(): (tid:" << Uint32(pegasus_thread_self()) << ")" << PEGASUS_STD(endl); | PEGASUS_STD(cout) << "Exiting: Monitor::~Monitor(): (tid:" << Uint32(pegasus_thread_self()) << ")" << PEGASUS_STD(endl); |
} | } |
|
#endif |
} | } |
| |
void Monitor::initializeTickler(){ | void Monitor::initializeTickler(){ |
|
#ifdef PEGASUS_LOCALDOMAINSOCKET_DEBUG |
{ | { |
AutoMutex automut(Monitor::_cout_mut); | AutoMutex automut(Monitor::_cout_mut); |
PEGASUS_STD(cout) << "Entering: Monitor::initializeTickler(): (tid:" << Uint32(pegasus_thread_self()) << ")" << PEGASUS_STD(endl); | PEGASUS_STD(cout) << "Entering: Monitor::initializeTickler(): (tid:" << Uint32(pegasus_thread_self()) << ")" << PEGASUS_STD(endl); |
} | } |
|
#endif |
/* | /* |
NOTE: On any errors trying to | NOTE: On any errors trying to |
setup out tickle connection, | setup out tickle connection, |
|
|
_MonitorEntry entry(_tickle_peer_socket, 1, INTERNAL); | _MonitorEntry entry(_tickle_peer_socket, 1, INTERNAL); |
entry._status = _MonitorEntry::IDLE; | entry._status = _MonitorEntry::IDLE; |
_entries.append(entry); | _entries.append(entry); |
|
#ifdef PEGASUS_LOCALDOMAINSOCKET_DEBUG |
{ | { |
AutoMutex automut(Monitor::_cout_mut); | AutoMutex automut(Monitor::_cout_mut); |
PEGASUS_STD(cout) << "Exiting: Monitor::initializeTickler(): (tid:" << Uint32(pegasus_thread_self()) << ")" << PEGASUS_STD(endl); | PEGASUS_STD(cout) << "Exiting: Monitor::initializeTickler(): (tid:" << Uint32(pegasus_thread_self()) << ")" << PEGASUS_STD(endl); |
} | } |
|
#endif |
} | } |
| |
void Monitor::tickle(void) | void Monitor::tickle(void) |
{ | { |
|
#ifdef PEGASUS_LOCALDOMAINSOCKET_DEBUG |
{ | { |
AutoMutex automut(Monitor::_cout_mut); | AutoMutex automut(Monitor::_cout_mut); |
PEGASUS_STD(cout) << "Entering: Monitor::tickle(): (tid:" << Uint32(pegasus_thread_self()) << ")" << PEGASUS_STD(endl); | PEGASUS_STD(cout) << "Entering: Monitor::tickle(): (tid:" << Uint32(pegasus_thread_self()) << ")" << PEGASUS_STD(endl); |
} | } |
|
#endif |
static char _buffer[] = | static char _buffer[] = |
{ | { |
'0','0' | '0','0' |
|
|
Socket::disableBlocking(_tickle_client_socket); | Socket::disableBlocking(_tickle_client_socket); |
Socket::write(_tickle_client_socket,&_buffer, 2); | Socket::write(_tickle_client_socket,&_buffer, 2); |
Socket::enableBlocking(_tickle_client_socket); | Socket::enableBlocking(_tickle_client_socket); |
|
#ifdef PEGASUS_LOCALDOMAINSOCKET_DEBUG |
{ | { |
AutoMutex automut(Monitor::_cout_mut); | AutoMutex automut(Monitor::_cout_mut); |
PEGASUS_STD(cout) << "Exiting: Monitor::tickle(): (tid:" << Uint32(pegasus_thread_self()) << ")" << PEGASUS_STD(endl); | PEGASUS_STD(cout) << "Exiting: Monitor::tickle(): (tid:" << Uint32(pegasus_thread_self()) << ")" << PEGASUS_STD(endl); |
} | } |
|
#endif |
} | } |
| |
void Monitor::setState( Uint32 index, _MonitorEntry::entry_status status ) | void Monitor::setState( Uint32 index, _MonitorEntry::entry_status status ) |
|
|
| |
Boolean Monitor::run(Uint32 milliseconds) | Boolean Monitor::run(Uint32 milliseconds) |
{ | { |
|
#ifdef PEGASUS_LOCALDOMAINSOCKET_DEBUG |
{ | { |
AutoMutex automut(Monitor::_cout_mut); | AutoMutex automut(Monitor::_cout_mut); |
PEGASUS_STD(cout) << "Entering: Monitor::run(): (tid:" << Uint32(pegasus_thread_self()) << ")" << PEGASUS_STD(endl); | PEGASUS_STD(cout) << "Entering: Monitor::run(): (tid:" << Uint32(pegasus_thread_self()) << ")" << PEGASUS_STD(endl); |
} | } |
|
#endif |
| |
Boolean handled_events = false; | Boolean handled_events = false; |
int i = 0; | int i = 0; |
|
|
DWORD dwWait=NULL; | DWORD dwWait=NULL; |
pEvents = 0; | pEvents = 0; |
| |
|
|
|
#ifdef PEGASUS_LOCALDOMAINSOCKET_DEBUG |
{ | { |
AutoMutex automut(Monitor::_cout_mut); | AutoMutex automut(Monitor::_cout_mut); |
cout << "Monitor::run - Calling WaitForMultipleObjects\n"; | cout << "Monitor::run - Calling WaitForMultipleObjects\n"; |
} | } |
|
#endif |
|
// } |
//this should be in a try block | //this should be in a try block |
| |
dwWait = WaitForMultipleObjects( | dwWait = WaitForMultipleObjects( |
|
|
| |
if(dwWait == WAIT_TIMEOUT) | if(dwWait == WAIT_TIMEOUT) |
{ | { |
|
#ifdef PEGASUS_LOCALDOMAINSOCKET_DEBUG |
{ | { |
AutoMutex automut(Monitor::_cout_mut); | AutoMutex automut(Monitor::_cout_mut); |
cout << "Wait WAIT_TIMEOUT\n"; | cout << "Wait WAIT_TIMEOUT\n"; |
cout << "Monitor::run before the select in TIMEOUT clause events = " << events << endl; | cout << "Monitor::run before the select in TIMEOUT clause events = " << events << endl; |
|
} |
|
#endif |
events = select(0, &fdread, NULL, NULL, &tv); | events = select(0, &fdread, NULL, NULL, &tv); |
|
#ifdef PEGASUS_LOCALDOMAINSOCKET_DEBUG |
|
AutoMutex automut(Monitor::_cout_mut); |
cout << "Monitor::run after the select in TIMEOUT clause events = " << events << endl; | cout << "Monitor::run after the select in TIMEOUT clause events = " << events << endl; |
} |
#endif |
|
|
| |
// Sleep(2000); | // Sleep(2000); |
//continue; | //continue; |
|
|
{ | { |
if (GetLastError() == 6) //WW this may be too specific | if (GetLastError() == 6) //WW this may be too specific |
{ | { |
|
#ifdef PEGASUS_LOCALDOMAINSOCKET_DEBUG |
AutoMutex automut(Monitor::_cout_mut); | AutoMutex automut(Monitor::_cout_mut); |
cout << "Monitor::run about to call 'select since waitForMultipleObjects failed\n"; | cout << "Monitor::run about to call 'select since waitForMultipleObjects failed\n"; |
|
#endif |
/********* NOTE | /********* NOTE |
this time (tv) combined with the waitForMulitpleObjects timeout is | this time (tv) combined with the waitForMulitpleObjects timeout is |
too long it will cause the client side to time out | too long it will cause the client side to time out |
|
|
} | } |
else | else |
{ | { |
|
#ifdef PEGASUS_LOCALDOMAINSOCKET_DEBUG |
AutoMutex automut(Monitor::_cout_mut); | AutoMutex automut(Monitor::_cout_mut); |
cout << "Wait Failed returned\n"; | cout << "Wait Failed returned\n"; |
cout << "failed with " << GetLastError() << "." << endl; | cout << "failed with " << GetLastError() << "." << endl; |
|
#endif |
pEvents = -1; | pEvents = -1; |
return false; | return false; |
} | } |
|
|
{ | { |
int pCount = dwWait - WAIT_OBJECT_0; // determines which pipe | int pCount = dwWait - WAIT_OBJECT_0; // determines which pipe |
{ | { |
|
#ifdef PEGASUS_LOCALDOMAINSOCKET_DEBUG |
{ | { |
AutoMutex automut(Monitor::_cout_mut); | AutoMutex automut(Monitor::_cout_mut); |
// cout << endl << "****************************" << | // cout << endl << "****************************" << |
|
|
pipeEntryCount << | pipeEntryCount << |
" this is the type " << entries[indexPipeCountAssociator[pCount]]._type << " this is index " << indexPipeCountAssociator[pCount] << endl; | " this is the type " << entries[indexPipeCountAssociator[pCount]]._type << " this is index " << indexPipeCountAssociator[pCount] << endl; |
} | } |
|
#endif |
| |
/* There is a timeing problem here sometimes the wite in HTTPConnection i s | /* There is a timeing problem here sometimes the wite in HTTPConnection i s |
not all the way done (has not _monitor->setState (_entry_index, _MonitorEntry::IDLE) ) | not all the way done (has not _monitor->setState (_entry_index, _MonitorEntry::IDLE) ) |
|
|
if (entries[indexPipeCountAssociator[pCount]]._status.get() != _MonitorEntry::IDLE) | if (entries[indexPipeCountAssociator[pCount]]._status.get() != _MonitorEntry::IDLE) |
{ | { |
this->setState(indexPipeCountAssociator[pCount], _MonitorEntry::IDLE); | this->setState(indexPipeCountAssociator[pCount], _MonitorEntry::IDLE); |
|
#ifdef PEGASUS_LOCALDOMAINSOCKET_DEBUG |
AutoMutex automut(Monitor::_cout_mut); | AutoMutex automut(Monitor::_cout_mut); |
|
|
cout << "setting state of index " << indexPipeCountAssociator[pCount] << " to IDLE" << endl; | cout << "setting state of index " << indexPipeCountAssociator[pCount] << " to IDLE" << endl; |
|
#endif |
} | } |
| |
| |
|
|
else if ((events)||(pEvents)) | else if ((events)||(pEvents)) |
{ | { |
| |
|
#ifdef PEGASUS_LOCALDOMAINSOCKET_DEBUG |
{ | { |
AutoMutex automut(Monitor::_cout_mut); | AutoMutex automut(Monitor::_cout_mut); |
cout << "IN Monior::run events= " << events << " pEvents= " << pEvents<< endl; | cout << "IN Monior::run events= " << events << " pEvents= " << pEvents<< endl; |
} | } |
|
#endif |
| |
Tracer::trace(TRC_HTTP, Tracer::LEVEL4, | Tracer::trace(TRC_HTTP, Tracer::LEVEL4, |
"Monitor::run select event received events = %d, monitoring %d idle entries", | "Monitor::run select event received events = %d, monitoring %d idle entries", |
|
|
(entries[indx].isNamedPipeConnection() && entries[indx].pipeSet && (pEvents)))) | (entries[indx].isNamedPipeConnection() && entries[indx].pipeSet && (pEvents)))) |
{ | { |
| |
|
#ifdef PEGASUS_LOCALDOMAINSOCKET_DEBUG |
{ | { |
AutoMutex automut(Monitor::_cout_mut); | AutoMutex automut(Monitor::_cout_mut); |
cout <<"Monitor::run - index " << indx << " just got into 'if' statement" << endl; | cout <<"Monitor::run - index " << indx << " just got into 'if' statement" << endl; |
} | } |
|
#endif |
MessageQueue *q; | MessageQueue *q; |
try{ | try{ |
| |
|
|
} | } |
catch (Exception e) | catch (Exception e) |
{ | { |
|
#ifdef PEGASUS_LOCALDOMAINSOCKET_DEBUG |
AutoMutex automut(Monitor::_cout_mut); | AutoMutex automut(Monitor::_cout_mut); |
cout << " this is what lookup gives - " << e.getMessage() << endl; | cout << " this is what lookup gives - " << e.getMessage() << endl; |
|
#endif |
exit(1); | exit(1); |
} | } |
catch(...) | catch(...) |
{ | { |
|
#ifdef PEGASUS_LOCALDOMAINSOCKET_DEBUG |
AutoMutex automut(Monitor::_cout_mut); | AutoMutex automut(Monitor::_cout_mut); |
cout << "MessageQueue::lookup gives strange exception " << endl; | cout << "MessageQueue::lookup gives strange exception " << endl; |
|
#endif |
exit(1); | exit(1); |
} | } |
| |
|
|
}*/ | }*/ |
if(entries[indx]._type == Monitor::CONNECTION) | if(entries[indx]._type == Monitor::CONNECTION) |
{ | { |
|
|
|
#ifdef PEGASUS_LOCALDOMAINSOCKET_DEBUG |
{ | { |
cout << "In Monitor::run Monitor::CONNECTION clause" << endl; | cout << "In Monitor::run Monitor::CONNECTION clause" << endl; |
AutoMutex automut(Monitor::_cout_mut); | AutoMutex automut(Monitor::_cout_mut); |
} | } |
|
#endif |
| |
Tracer::trace(TRC_HTTP, Tracer::LEVEL4, | Tracer::trace(TRC_HTTP, Tracer::LEVEL4, |
"entries[indx].type for indx = %d is Monitor::CONNECTION", indx); | "entries[indx].type for indx = %d is Monitor::CONNECTION", indx); |
|
|
*/ | */ |
| |
dst->setNamedPipe(entries[indx].namedPipe); //this step shouldn't be needd | dst->setNamedPipe(entries[indx].namedPipe); //this step shouldn't be needd |
|
#ifdef PEGASUS_LOCALDOMAINSOCKET_DEBUG |
{ | { |
AutoMutex automut(Monitor::_cout_mut); | AutoMutex automut(Monitor::_cout_mut); |
cout << "In Monitor::run after dst->setNamedPipe string read is " << entries[indx].namedPipe.raw << endl; | cout << "In Monitor::run after dst->setNamedPipe string read is " << entries[indx].namedPipe.raw << endl; |
} | } |
|
#endif |
try | try |
{ | { |
|
#ifdef PEGASUS_LOCALDOMAINSOCKET_DEBUG |
{ | { |
AutoMutex automut(Monitor::_cout_mut); | AutoMutex automut(Monitor::_cout_mut); |
cout << "In Monitor::run about to call 'dst->run(1)' " << endl; | cout << "In Monitor::run about to call 'dst->run(1)' " << endl; |
} | } |
|
#endif |
dst->run(1); | dst->run(1); |
} | } |
catch (...) | catch (...) |
{ | { |
AutoMutex automut(Monitor::_cout_mut); |
|
Tracer::trace(TRC_HTTP, Tracer::LEVEL4, | Tracer::trace(TRC_HTTP, Tracer::LEVEL4, |
"Monitor::_dispatch: exception received"); | "Monitor::_dispatch: exception received"); |
} | } |
|
|
// set ourself to BUSY, | // set ourself to BUSY, |
// read the data | // read the data |
// and set ourself back to IDLE | // and set ourself back to IDLE |
|
#ifdef PEGASUS_LOCALDOMAINSOCKET_DEBUG |
|
AutoMutex automut(Monitor::_cout_mut); |
|
|
cout << endl << " in - entries[indx]._type == Monitor::INTERNAL- " << endl << endl; | cout << endl << " in - entries[indx]._type == Monitor::INTERNAL- " << endl << endl; |
|
#endif |
if (!entries[indx].isNamedPipeConnection()) | if (!entries[indx].isNamedPipeConnection()) |
{ | { |
entries[indx]._status = _MonitorEntry::BUSY; | entries[indx]._status = _MonitorEntry::BUSY; |
|
|
} | } |
else | else |
{ | { |
{ |
|
| |
|
#ifdef PEGASUS_LOCALDOMAINSOCKET_DEBUG |
|
{ |
AutoMutex automut(Monitor::_cout_mut); | AutoMutex automut(Monitor::_cout_mut); |
cout << "In Monitor::run else clause of CONNECTION if statments" << endl; | cout << "In Monitor::run else clause of CONNECTION if statments" << endl; |
} | } |
|
#endif |
Tracer::trace(TRC_HTTP, Tracer::LEVEL4, | Tracer::trace(TRC_HTTP, Tracer::LEVEL4, |
"Non-connection entry, indx = %d, has been received.", indx); | "Non-connection entry, indx = %d, has been received.", indx); |
int events = 0; | int events = 0; |
Message *msg; | Message *msg; |
{ |
|
| |
|
#ifdef PEGASUS_LOCALDOMAINSOCKET_DEBUG |
|
{ |
AutoMutex automut(Monitor::_cout_mut); | AutoMutex automut(Monitor::_cout_mut); |
cout << " In Monitor::run Just before checking if NamedPipeConnection" << "for Index "<<indx<< endl; | cout << " In Monitor::run Just before checking if NamedPipeConnection" << "for Index "<<indx<< endl; |
} | } |
|
#endif |
if (entries[indx].isNamedPipeConnection()) | if (entries[indx].isNamedPipeConnection()) |
{ | { |
if(!entries[indx].namedPipe.isConnectionPipe) | if(!entries[indx].namedPipe.isConnectionPipe) |
|
|
| |
| |
| |
memset(entries[indx].namedPipe.raw,'\0',4096); |
memset(entries[indx].namedPipe.raw,'\0',NAMEDPIPE_MAX_BUFFER_SIZE); |
BOOL rc = ::ReadFile( | BOOL rc = ::ReadFile( |
entries[indx].namedPipe.getPipe(), | entries[indx].namedPipe.getPipe(), |
&entries[indx].namedPipe.raw, | &entries[indx].namedPipe.raw, |
NAMEDPIPE_MAX_BUFFER_SIZE, | NAMEDPIPE_MAX_BUFFER_SIZE, |
&entries[indx].namedPipe.bytesRead, | &entries[indx].namedPipe.bytesRead, |
entries[indx].namedPipe.getOverlap()); | entries[indx].namedPipe.getOverlap()); |
|
#ifdef PEGASUS_LOCALDOMAINSOCKET_DEBUG |
{ | { |
AutoMutex automut(Monitor::_cout_mut); | AutoMutex automut(Monitor::_cout_mut); |
cout << "Monitor::run just called read on index " << indx << endl; | cout << "Monitor::run just called read on index " << indx << endl; |
} | } |
|
#endif |
| |
//&entries[indx].namedPipe.bytesRead = &size; | //&entries[indx].namedPipe.bytesRead = &size; |
if(!rc) | if(!rc) |
{ | { |
|
#ifdef PEGASUS_LOCALDOMAINSOCKET_DEBUG |
AutoMutex automut(Monitor::_cout_mut); | AutoMutex automut(Monitor::_cout_mut); |
cout << "ReadFile failed for : " << GetLastError() << "."<< endl; | cout << "ReadFile failed for : " << GetLastError() << "."<< endl; |
|
#endif |
} | } |
| |
| |
|
|
| |
| |
} | } |
|
#ifdef PEGASUS_LOCALDOMAINSOCKET_DEBUG |
{ | { |
AutoMutex automut(Monitor::_cout_mut); | AutoMutex automut(Monitor::_cout_mut); |
cout << " In Monitor::run about to create a Pipe message" << endl; | cout << " In Monitor::run about to create a Pipe message" << endl; |
| |
} | } |
|
#endif |
events |= NamedPipeMessage::READ; | events |= NamedPipeMessage::READ; |
msg = new NamedPipeMessage(entries[indx].namedPipe, events); | msg = new NamedPipeMessage(entries[indx].namedPipe, events); |
} | } |
else | else |
{ | { |
|
#ifdef PEGASUS_LOCALDOMAINSOCKET_DEBUG |
{ | { |
AutoMutex automut(Monitor::_cout_mut); | AutoMutex automut(Monitor::_cout_mut); |
cout << " In Monitor::run ..its a socket message" << endl; | cout << " In Monitor::run ..its a socket message" << endl; |
} | } |
|
#endif |
events |= SocketMessage::READ; | events |= SocketMessage::READ; |
msg = new SocketMessage(entries[indx].socket, events); | msg = new SocketMessage(entries[indx].socket, events); |
} | } |
|
|
entries.reset(_entries); | entries.reset(_entries); |
entries[indx]._status = _MonitorEntry::IDLE; | entries[indx]._status = _MonitorEntry::IDLE; |
| |
|
#ifdef PEGASUS_LOCALDOMAINSOCKET_DEBUG |
{ | { |
AutoMutex automut(Monitor::_cout_mut); | AutoMutex automut(Monitor::_cout_mut); |
PEGASUS_STD(cout) << "Exiting: Monitor::run(): (tid:" << Uint32(pegasus_thread_self()) << ")" << PEGASUS_STD(endl); | PEGASUS_STD(cout) << "Exiting: Monitor::run(): (tid:" << Uint32(pegasus_thread_self()) << ")" << PEGASUS_STD(endl); |
} | } |
|
#endif |
return true; | return true; |
} | } |
} | } |
|
|
} | } |
} | } |
| |
|
#ifdef PEGASUS_LOCALDOMAINSOCKET_DEBUG |
{ | { |
AutoMutex automut(Monitor::_cout_mut); | AutoMutex automut(Monitor::_cout_mut); |
PEGASUS_STD(cout) << "Exiting: Monitor::run(): (tid:" << Uint32(pegasus_thread_self()) << ")" << PEGASUS_STD(endl); | PEGASUS_STD(cout) << "Exiting: Monitor::run(): (tid:" << Uint32(pegasus_thread_self()) << ")" << PEGASUS_STD(endl); |
} | } |
|
#endif |
return(handled_events); | return(handled_events); |
} | } |
| |
void Monitor::stopListeningForConnections(Boolean wait) | void Monitor::stopListeningForConnections(Boolean wait) |
{ | { |
|
#ifdef PEGASUS_LOCALDOMAINSOCKET_DEBUG |
{ | { |
AutoMutex automut(Monitor::_cout_mut); | AutoMutex automut(Monitor::_cout_mut); |
PEGASUS_STD(cout) << "Entering: Monitor::stopListeningForConnections(): (tid:" << Uint32(pegasus_thread_self()) << ")" << PEGASUS_STD(endl); | PEGASUS_STD(cout) << "Entering: Monitor::stopListeningForConnections(): (tid:" << Uint32(pegasus_thread_self()) << ")" << PEGASUS_STD(endl); |
} | } |
|
#endif |
PEG_METHOD_ENTER(TRC_HTTP, "Monitor::stopListeningForConnections()"); | PEG_METHOD_ENTER(TRC_HTTP, "Monitor::stopListeningForConnections()"); |
// set boolean then tickle the server to recognize _stopConnections | // set boolean then tickle the server to recognize _stopConnections |
_stopConnections = 1; | _stopConnections = 1; |
|
|
} | } |
| |
PEG_METHOD_EXIT(); | PEG_METHOD_EXIT(); |
|
#ifdef PEGASUS_LOCALDOMAINSOCKET_DEBUG |
{ | { |
AutoMutex automut(Monitor::_cout_mut); | AutoMutex automut(Monitor::_cout_mut); |
PEGASUS_STD(cout) << "Exiting: Monitor::stopListeningForConnections(): (tid:" << Uint32(pegasus_thread_self()) << ")" << PEGASUS_STD(endl); | PEGASUS_STD(cout) << "Exiting: Monitor::stopListeningForConnections(): (tid:" << Uint32(pegasus_thread_self()) << ")" << PEGASUS_STD(endl); |
} | } |
|
#endif |
} | } |
| |
| |
|
|
Uint32 queueId, | Uint32 queueId, |
int type) | int type) |
{ | { |
|
#ifdef PEGASUS_LOCALDOMAINSOCKET_DEBUG |
{ | { |
AutoMutex automut(Monitor::_cout_mut); | AutoMutex automut(Monitor::_cout_mut); |
PEGASUS_STD(cout) << "Entering: Monitor::solicitSocketMessages(): (tid:" << Uint32(pegasus_thread_self()) << ")" << PEGASUS_STD(endl); | PEGASUS_STD(cout) << "Entering: Monitor::solicitSocketMessages(): (tid:" << Uint32(pegasus_thread_self()) << ")" << PEGASUS_STD(endl); |
} | } |
|
#endif |
PEG_METHOD_ENTER(TRC_HTTP, "Monitor::solicitSocketMessages"); | PEG_METHOD_ENTER(TRC_HTTP, "Monitor::solicitSocketMessages"); |
AutoMutex autoMut(_entry_mut); | AutoMutex autoMut(_entry_mut); |
// Check to see if we need to dynamically grow the _entries array | // Check to see if we need to dynamically grow the _entries array |
|
|
_entries[index]._type = type; | _entries[index]._type = type; |
_entries[index]._status = _MonitorEntry::IDLE; | _entries[index]._status = _MonitorEntry::IDLE; |
| |
|
#ifdef PEGASUS_LOCALDOMAINSOCKET_DEBUG |
{ | { |
AutoMutex automut(Monitor::_cout_mut); | AutoMutex automut(Monitor::_cout_mut); |
PEGASUS_STD(cout) << "Exiting: Monitor::solicitSocketMessages(): (tid:" << Uint32(pegasus_thread_self()) << ")" << PEGASUS_STD(endl); | PEGASUS_STD(cout) << "Exiting: Monitor::solicitSocketMessages(): (tid:" << Uint32(pegasus_thread_self()) << ")" << PEGASUS_STD(endl); |
} | } |
|
#endif |
return index; | return index; |
} | } |
} | } |
|
|
} | } |
_solicitSocketCount--; // decrease the count, if we are here we didnt do anything meaningful | _solicitSocketCount--; // decrease the count, if we are here we didnt do anything meaningful |
PEG_METHOD_EXIT(); | PEG_METHOD_EXIT(); |
|
#ifdef PEGASUS_LOCALDOMAINSOCKET_DEBUG |
{ | { |
AutoMutex automut(Monitor::_cout_mut); | AutoMutex automut(Monitor::_cout_mut); |
PEGASUS_STD(cout) << "Exiting: Monitor::solicitSocketMessages(): (tid:" << Uint32(pegasus_thread_self()) << ")" << PEGASUS_STD(endl); | PEGASUS_STD(cout) << "Exiting: Monitor::solicitSocketMessages(): (tid:" << Uint32(pegasus_thread_self()) << ")" << PEGASUS_STD(endl); |
} | } |
|
#endif |
return -1; | return -1; |
| |
} | } |
| |
void Monitor::unsolicitSocketMessages(PEGASUS_SOCKET socket) | void Monitor::unsolicitSocketMessages(PEGASUS_SOCKET socket) |
{ | { |
|
#ifdef PEGASUS_LOCALDOMAINSOCKET_DEBUG |
{ | { |
AutoMutex automut(Monitor::_cout_mut); | AutoMutex automut(Monitor::_cout_mut); |
PEGASUS_STD(cout) << "Entering: Monitor::unsolicitSocketMessages(): (tid:" << Uint32(pegasus_thread_self()) << ")" << PEGASUS_STD(endl); | PEGASUS_STD(cout) << "Entering: Monitor::unsolicitSocketMessages(): (tid:" << Uint32(pegasus_thread_self()) << ")" << PEGASUS_STD(endl); |
} | } |
|
#endif |
| |
PEG_METHOD_ENTER(TRC_HTTP, "Monitor::unsolicitSocketMessages"); | PEG_METHOD_ENTER(TRC_HTTP, "Monitor::unsolicitSocketMessages"); |
AutoMutex autoMut(_entry_mut); | AutoMutex autoMut(_entry_mut); |
|
|
index--; | index--; |
} | } |
PEG_METHOD_EXIT(); | PEG_METHOD_EXIT(); |
|
#ifdef PEGASUS_LOCALDOMAINSOCKET_DEBUG |
{ | { |
AutoMutex automut(Monitor::_cout_mut); | AutoMutex automut(Monitor::_cout_mut); |
PEGASUS_STD(cout) << "Exiting: Monitor::unsolicitSocketMessages(): (tid:" << Uint32(pegasus_thread_self()) << ")" << PEGASUS_STD(endl); | PEGASUS_STD(cout) << "Exiting: Monitor::unsolicitSocketMessages(): (tid:" << Uint32(pegasus_thread_self()) << ")" << PEGASUS_STD(endl); |
} | } |
|
#endif |
} | } |
| |
// Note: this is no longer called with PEP 183. | // Note: this is no longer called with PEP 183. |
PEGASUS_THREAD_RETURN PEGASUS_THREAD_CDECL Monitor::_dispatch(void *parm) | PEGASUS_THREAD_RETURN PEGASUS_THREAD_CDECL Monitor::_dispatch(void *parm) |
{ | { |
|
#ifdef PEGASUS_LOCALDOMAINSOCKET_DEBUG |
{ | { |
AutoMutex automut(Monitor::_cout_mut); | AutoMutex automut(Monitor::_cout_mut); |
PEGASUS_STD(cout) << "Entering: Monitor::_dispatch(): (tid:" << Uint32(pegasus_thread_self()) << ")" << PEGASUS_STD(endl); | PEGASUS_STD(cout) << "Entering: Monitor::_dispatch(): (tid:" << Uint32(pegasus_thread_self()) << ")" << PEGASUS_STD(endl); |
} | } |
|
#endif |
HTTPConnection *dst = reinterpret_cast<HTTPConnection *>(parm); | HTTPConnection *dst = reinterpret_cast<HTTPConnection *>(parm); |
Tracer::trace(TRC_HTTP, Tracer::LEVEL4, | Tracer::trace(TRC_HTTP, Tracer::LEVEL4, |
"Monitor::_dispatch: entering run() for indx = %d, queueId = %d, q = %p", | "Monitor::_dispatch: entering run() for indx = %d, queueId = %d, q = %p", |
|
|
int type) | int type) |
{ | { |
PEG_METHOD_ENTER(TRC_HTTP, "Monitor::solicitPipeMessages"); | PEG_METHOD_ENTER(TRC_HTTP, "Monitor::solicitPipeMessages"); |
|
|
AutoMutex autoMut(_entry_mut); | AutoMutex autoMut(_entry_mut); |
// Check to see if we need to dynamically grow the _entries array | // Check to see if we need to dynamically grow the _entries array |
// We always want the _entries array to 2 bigger than the | // We always want the _entries array to 2 bigger than the |
// current connections requested | // current connections requested |
|
#ifdef PEGASUS_LOCALDOMAINSOCKET_DEBUG |
|
AutoMutex automut(Monitor::_cout_mut); |
PEGASUS_STD(cout) << "In Monitor::solicitPipeMessages at the begining" << PEGASUS_STD(endl); | PEGASUS_STD(cout) << "In Monitor::solicitPipeMessages at the begining" << PEGASUS_STD(endl); |
|
#endif |
| |
| |
_solicitSocketCount++; // bump the count | _solicitSocketCount++; // bump the count |
|
|
_entries[index].queueId = queueId; | _entries[index].queueId = queueId; |
_entries[index]._type = type; | _entries[index]._type = type; |
_entries[index]._status = _MonitorEntry::IDLE; | _entries[index]._status = _MonitorEntry::IDLE; |
|
#ifdef PEGASUS_LOCALDOMAINSOCKET_DEBUG |
|
AutoMutex automut(Monitor::_cout_mut); |
PEGASUS_STD(cout) << "In Monitor::solicitPipeMessages after seting up _entries[index] index = " << index << PEGASUS_STD(endl); | PEGASUS_STD(cout) << "In Monitor::solicitPipeMessages after seting up _entries[index] index = " << index << PEGASUS_STD(endl); |
|
#endif |
return index; | return index; |
} | } |
} | } |
|
|
| |
void Monitor::unsolicitPipeMessages(NamedPipe namedPipe) | void Monitor::unsolicitPipeMessages(NamedPipe namedPipe) |
{ | { |
|
#ifdef PEGASUS_LOCALDOMAINSOCKET_DEBUG |
{ | { |
AutoMutex automut(Monitor::_cout_mut); | AutoMutex automut(Monitor::_cout_mut); |
PEGASUS_STD(cout) << "Entering: Monitor::unsolicitPipeMessages(): (tid:" << Uint32(pegasus_thread_self()) << ")" << PEGASUS_STD(endl); | PEGASUS_STD(cout) << "Entering: Monitor::unsolicitPipeMessages(): (tid:" << Uint32(pegasus_thread_self()) << ")" << PEGASUS_STD(endl); |
} | } |
|
#endif |
| |
PEG_METHOD_ENTER(TRC_HTTP, "Monitor::unsolicitPipeMessages"); | PEG_METHOD_ENTER(TRC_HTTP, "Monitor::unsolicitPipeMessages"); |
AutoMutex autoMut(_entry_mut); | AutoMutex autoMut(_entry_mut); |
|
|
index--; | index--; |
} | } |
PEG_METHOD_EXIT(); | PEG_METHOD_EXIT(); |
|
#ifdef PEGASUS_LOCALDOMAINSOCKET_DEBUG |
{ | { |
AutoMutex automut(Monitor::_cout_mut); | AutoMutex automut(Monitor::_cout_mut); |
PEGASUS_STD(cout) << "Exiting: Monitor::unsolicitPipeMessages(): (tid:" << Uint32(pegasus_thread_self()) << ")" << PEGASUS_STD(endl); | PEGASUS_STD(cout) << "Exiting: Monitor::unsolicitPipeMessages(): (tid:" << Uint32(pegasus_thread_self()) << ")" << PEGASUS_STD(endl); |
} | } |
|
#endif |
} | } |
| |
| |