version 1.23, 2002/06/10 21:43:40
|
version 1.24, 2002/06/11 21:28:08
|
|
|
return false; | return false; |
} | } |
| |
|
|
Boolean handled_events = false; | Boolean handled_events = false; |
|
try { _connection_mutex.try_lock(pegasus_thread_self()); } |
|
catch(AlreadyLocked){ |
|
pegasus_sleep(1); |
|
return false; |
|
} |
|
|
for (Uint32 i = 0, n = _entries.size(); i < _entries.size(); i++) | for (Uint32 i = 0, n = _entries.size(); i < _entries.size(); i++) |
{ | { |
Sint32 socket = _entries[i].socket; | Sint32 socket = _entries[i].socket; |
|
|
MessageQueue & o = static_cast<HTTPConnection *>(q)->get_owner(); | MessageQueue & o = static_cast<HTTPConnection *>(q)->get_owner(); |
Message* message= new CloseConnectionMessage(static_cast<HTTPConnection *>(q)->getSocket()); | Message* message= new CloseConnectionMessage(static_cast<HTTPConnection *>(q)->getSocket()); |
message->dest = o.getQueueId(); | message->dest = o.getQueueId(); |
|
_connection_mutex.unlock(); |
|
|
o.enqueue(message); | o.enqueue(message); |
|
return true; |
i--; | i--; |
n = _entries.size(); | n = _entries.size(); |
} | } |
|
|
if (FD_ISSET(socket, &_rep->active_rd_fd_set)) | if (FD_ISSET(socket, &_rep->active_rd_fd_set)) |
events |= SocketMessage::READ; | events |= SocketMessage::READ; |
| |
// if (FD_ISSET(socket, &_rep->active_wr_fd_set)) |
|
// events |= SocketMessage::WRITE; |
|
|
|
if (FD_ISSET(socket, &_rep->active_ex_fd_set)) | if (FD_ISSET(socket, &_rep->active_ex_fd_set)) |
events |= SocketMessage::EXCEPTION; | events |= SocketMessage::EXCEPTION; |
| |
|
|
{ | { |
Tracer::trace(TRC_HTTP, Tracer::LEVEL4, | Tracer::trace(TRC_HTTP, Tracer::LEVEL4, |
"Monitor::run - Socket Event Detected events = %d", events); | "Monitor::run - Socket Event Detected events = %d", events); |
// if (events & SocketMessage::WRITE) |
|
// { |
|
// FD_CLR(socket, &_rep->active_wr_fd_set); |
|
// Tracer::trace(TRC_HTTP, Tracer::LEVEL4, |
|
// "Monitor::run FD_CLR WRITE"); |
|
// } |
|
|
|
if (events & SocketMessage::READ) | if (events & SocketMessage::READ) |
{ | { |
FD_CLR(socket, &_rep->active_rd_fd_set); | FD_CLR(socket, &_rep->active_rd_fd_set); |
|
|
{ | { |
Tracer::trace(TRC_HTTP, Tracer::LEVEL4, | Tracer::trace(TRC_HTTP, Tracer::LEVEL4, |
"Monitor::run lookup for connection entry failed, unsoliciting"); | "Monitor::run lookup for connection entry failed, unsoliciting"); |
|
_connection_mutex.unlock(); |
unsolicitSocketMessages(socket); | unsolicitSocketMessages(socket); |
break; |
return true; |
} | } |
| |
if(_async == true && _entries[i]._type == Monitor::CONNECTION) | if(_async == true && _entries[i]._type == Monitor::CONNECTION) |
|
|
} | } |
else | else |
{ | { |
|
_connection_mutex.unlock(); |
|
|
Tracer::trace(TRC_HTTP, Tracer::LEVEL4, | Tracer::trace(TRC_HTTP, Tracer::LEVEL4, |
"Monitor::run enqueueing to non-connection HTTP class"); | "Monitor::run enqueueing to non-connection HTTP class"); |
Message* message = new SocketMessage(socket, events); | Message* message = new SocketMessage(socket, events); |
queue->enqueue(message); | queue->enqueue(message); |
|
return true; |
|
|
} | } |
count--; | count--; |
pegasus_yield(); | pegasus_yield(); |
} | } |
handled_events = true; | handled_events = true; |
} | } |
|
_connection_mutex.unlock(); |
return(handled_events); | return(handled_events); |
} | } |
| |
|
|
| |
// Look for the given entry and remove it: | // Look for the given entry and remove it: |
| |
|
_connection_mutex.lock(pegasus_thread_self()); |
|
|
for (Uint32 i = 0, n = _entries.size(); i < n; i++) | for (Uint32 i = 0, n = _entries.size(); i < n; i++) |
{ | { |
if (_entries[i].socket == socket) | if (_entries[i].socket == socket) |
|
|
// ATTN-RK-P3-20020521: Need "Socket::close(socket);" here? | // ATTN-RK-P3-20020521: Need "Socket::close(socket);" here? |
Socket::close(socket); | Socket::close(socket); |
PEG_METHOD_EXIT(); | PEG_METHOD_EXIT(); |
|
_connection_mutex.unlock(); |
return true; | return true; |
} | } |
} | } |
PEG_METHOD_EXIT(); | PEG_METHOD_EXIT(); |
|
_connection_mutex.unlock(); |
|
|
return false; | return false; |
} | } |
| |
Uint32 Monitor::_findEntry(Sint32 socket) | Uint32 Monitor::_findEntry(Sint32 socket) |
{ | { |
|
_connection_mutex.lock(pegasus_thread_self()); |
|
|
for (Uint32 i = 0, n = _entries.size(); i < n; i++) | for (Uint32 i = 0, n = _entries.size(); i < n; i++) |
{ | { |
if (_entries[i].socket == socket) | if (_entries[i].socket == socket) |
|
{ |
|
_connection_mutex.unlock(); |
return i; | return i; |
} | } |
|
} |
|
_connection_mutex.unlock(); |
return PEG_NOT_FOUND; | return PEG_NOT_FOUND; |
} | } |
| |