version 1.32, 2002/03/11 02:36:18
|
version 1.33, 2002/03/11 14:58:54
|
|
|
_mask(mask), | _mask(mask), |
_die(0), | _die(0), |
_pending(true), | _pending(true), |
_incoming(true, 100 ), |
_incoming(true, 1000), |
_incoming_queue_shutdown(0), | _incoming_queue_shutdown(0), |
_req_thread(_req_proc, this, false) | _req_thread(_req_proc, this, false) |
{ | { |
|
|
if (_incoming_queue_shutdown.value() == 0 ) | if (_incoming_queue_shutdown.value() == 0 ) |
{ | { |
_shutdown_incoming_queue(); | _shutdown_incoming_queue(); |
|
|
//_incoming.shutdown_queue(); |
|
_req_thread.join(); | _req_thread.join(); |
} | } |
| |
|
|
return(0); | return(0); |
} | } |
| |
|
void MessageQueueService::_sendwait_callback(AsyncOpNode *op, |
|
MessageQueue *q, |
|
void *parm) |
|
{ |
|
op->_client_sem.signal(); |
|
} |
|
|
| |
// callback function is responsible for cleaning up all resources | // callback function is responsible for cleaning up all resources |
// including op, op->_callback_node, and op->_callback_ptr | // including op, op->_callback_node, and op->_callback_ptr |
|
|
destroy_op = true; | destroy_op = true; |
} | } |
| |
request->block = true; |
request->block = false; |
request->op->lock(); |
|
request->op->_state &= ~ASYNC_OPSTATE_COMPLETE; |
|
request->op->_flags &= ~ASYNC_OPFLAGS_CALLBACK; |
|
|
|
request->op->_op_dest = MessageQueue::lookup(request->dest); |
|
request->op->unlock(); |
|
| |
if ( request->op->_op_dest == 0 ) |
SendAsync(request->op, |
return 0; |
request->dest, |
|
_sendwait_callback, |
|
this, |
|
(void *)0); |
| |
// now see if the meta dispatcher will take it |
|
if (true == _meta_dispatcher->route_async(request->op)) |
|
{ |
|
request->op->_client_sem.wait(); | request->op->_client_sem.wait(); |
PEGASUS_ASSERT(request->op->_state & ASYNC_OPSTATE_COMPLETE); |
|
} |
|
|
|
request->op->lock(); | request->op->lock(); |
AsyncReply * rpl = static_cast<AsyncReply *>(request->op->_response.remove_first()); | AsyncReply * rpl = static_cast<AsyncReply *>(request->op->_response.remove_first()); |
rpl->op = 0; | rpl->op = 0; |