version 1.88.2.2, 2005/04/14 21:12:01
|
version 1.90, 2004/10/27 20:03:36
|
|
|
//%2005//////////////////////////////////////////////////////////////////////// |
//%2004//////////////////////////////////////////////////////////////////////// |
// | // |
// Copyright (c) 2000, 2001, 2002 BMC Software; Hewlett-Packard Development | // Copyright (c) 2000, 2001, 2002 BMC Software; Hewlett-Packard Development |
// Company, L.P.; IBM Corp.; The Open Group; Tivoli Systems. | // Company, L.P.; IBM Corp.; The Open Group; Tivoli Systems. |
|
|
// IBM Corp.; EMC Corporation, The Open Group. | // IBM Corp.; EMC Corporation, The Open Group. |
// Copyright (c) 2004 BMC Software; Hewlett-Packard Development Company, L.P.; | // Copyright (c) 2004 BMC Software; Hewlett-Packard Development Company, L.P.; |
// IBM Corp.; EMC Corporation; VERITAS Software Corporation; The Open Group. | // IBM Corp.; EMC Corporation; VERITAS Software Corporation; The Open Group. |
// Copyright (c) 2005 Hewlett-Packard Development Company, L.P.; IBM Corp.; |
|
// EMC Corporation; VERITAS Software Corporation; The Open Group. |
|
// | // |
// Permission is hereby granted, free of charge, to any person obtaining a copy | // Permission is hereby granted, free of charge, to any person obtaining a copy |
// of this software and associated documentation files (the "Software"), to | // of this software and associated documentation files (the "Software"), to |
|
|
| |
} | } |
} | } |
|
return (PEGASUS_THREAD_RETURN)dead_threads; |
#ifdef PEGASUS_POINTER_64BIT |
|
return (PEGASUS_THREAD_RETURN)(Uint64)dead_threads; |
|
#elif PEGASUS_PLATFORM_AIX_RS_IBMCXX |
|
return (PEGASUS_THREAD_RETURN)(unsigned long)dead_threads; |
|
#else |
|
return (PEGASUS_THREAD_RETURN)(Uint32)dead_threads; |
|
#endif |
|
} | } |
| |
| |
|
|
| |
if( _meta_dispatcher == 0 ) | if( _meta_dispatcher == 0 ) |
{ | { |
_stop_polling = 0; |
|
PEGASUS_ASSERT( _service_count.value() == 0 ); | PEGASUS_ASSERT( _service_count.value() == 0 ); |
_meta_dispatcher = new cimom(); | _meta_dispatcher = new cimom(); |
if (_meta_dispatcher == NULL ) | if (_meta_dispatcher == NULL ) |
|
|
PEGASUS_THREAD_RETURN PEGASUS_THREAD_CDECL MessageQueueService::_req_proc(void * parm) | PEGASUS_THREAD_RETURN PEGASUS_THREAD_CDECL MessageQueueService::_req_proc(void * parm) |
{ | { |
MessageQueueService *service = reinterpret_cast<MessageQueueService *>(parm); | MessageQueueService *service = reinterpret_cast<MessageQueueService *>(parm); |
|
|
|
if ( service->_die.value() != 0) |
|
return (0); |
|
|
// pull messages off the incoming queue and dispatch them. then | // pull messages off the incoming queue and dispatch them. then |
// check pending messages that are non-blocking | // check pending messages that are non-blocking |
AsyncOpNode *operation = 0; | AsyncOpNode *operation = 0; |
| |
if ( service->_die.value() == 0 ) |
// many operations may have been queued. |
|
do |
{ | { |
try | try |
{ | { |
|
|
} | } |
catch(ListClosed & ) | catch(ListClosed & ) |
{ | { |
operation = 0; |
break; |
|
|
return(0); |
|
} | } |
|
|
if( operation ) | if( operation ) |
{ | { |
operation->_service_ptr = service; | operation->_service_ptr = service; |
service->_handle_incoming_operation(operation); | service->_handle_incoming_operation(operation); |
} | } |
} |
} while (operation); |
| |
return(0); | return(0); |
} | } |
|
|
op->_op_dest = MessageQueue::lookup(destination); // destination of this message | op->_op_dest = MessageQueue::lookup(destination); // destination of this message |
op->_flags |= ASYNC_OPFLAGS_CALLBACK; | op->_flags |= ASYNC_OPFLAGS_CALLBACK; |
op->_flags &= ~(ASYNC_OPFLAGS_FIRE_AND_FORGET); | op->_flags &= ~(ASYNC_OPFLAGS_FIRE_AND_FORGET); |
op->_state &= ~ASYNC_OPSTATE_COMPLETE; |
|
// initialize the callback data | // initialize the callback data |
op->_async_callback = callback; // callback function to be executed by recpt. of response | op->_async_callback = callback; // callback function to be executed by recpt. of response |
op->_callback_node = op; // the op node | op->_callback_node = op; // the op node |