version 1.8, 2002/02/04 02:52:06
|
version 1.9, 2002/02/04 17:37:56
|
|
|
void MessageQueueService::_shutdown_incoming_queue(void) | void MessageQueueService::_shutdown_incoming_queue(void) |
{ | { |
| |
|
if (_incoming_queue_shutdown.value() > 0 ) |
|
return ; |
|
|
AsyncIoctl *msg = new AsyncIoctl(get_next_xid(), | AsyncIoctl *msg = new AsyncIoctl(get_next_xid(), |
0, | 0, |
_queueId, | _queueId, |
|
|
AsyncIoctl::IO_CLOSE, | AsyncIoctl::IO_CLOSE, |
0, | 0, |
0); | 0); |
|
|
msg->op = get_op(); | msg->op = get_op(); |
msg->op->_request.insert_first(msg); | msg->op->_request.insert_first(msg); |
Boolean closed = false; |
|
| |
if (_incoming_queue_shutdown.value() > 0 ) |
|
return ; |
|
| |
_incoming.insert_last_wait(msg->op); | _incoming.insert_last_wait(msg->op); |
msg->op->_client_sem.wait(); | msg->op->_client_sem.wait(); |
|
|
AsyncReply * reply = static_cast<AsyncReply *>(msg->op->_response.remove_first()); | AsyncReply * reply = static_cast<AsyncReply *>(msg->op->_response.remove_first()); |
reply->op = 0; | reply->op = 0; |
msg->op->unlock(); | msg->op->unlock(); |
if ( reply != 0 ) |
|
{ |
|
if(reply->getMask() & message_mask:: ha_async) |
|
{ |
|
if(reply->getMask() & message_mask::ha_reply) |
|
{ |
|
if(reply->result == async_results::OK) |
|
closed = true; |
|
} |
|
} |
|
delete reply; | delete reply; |
} |
|
| |
msg->op->_request.remove(msg); | msg->op->_request.remove(msg); |
msg->op->_state |= ASYNC_OPSTATE_RELEASED; | msg->op->_state |= ASYNC_OPSTATE_RELEASED; |
|
|
return_op(msg->op); | return_op(msg->op); |
|
|
msg->op = 0; | msg->op = 0; |
delete msg; | delete msg; |
} | } |
|
|
{ | { |
AsyncOpNode *op = new AsyncOpNode(); | AsyncOpNode *op = new AsyncOpNode(); |
| |
op->write_state(ASYNC_OPSTATE_UNKNOWN); |
op->_state = ASYNC_OPSTATE_UNKNOWN; |
op->write_flags(ASYNC_OPFLAGS_SINGLE | ASYNC_OPFLAGS_NORMAL ); |
op->_flags = ASYNC_OPFLAGS_SINGLE | ASYNC_OPFLAGS_NORMAL; |
| |
return op; | return op; |
} | } |