version 1.6, 2004/10/17 20:39:56
|
version 1.10, 2005/06/24 19:34:25
|
|
|
//%2004//////////////////////////////////////////////////////////////////////// |
//%2005//////////////////////////////////////////////////////////////////////// |
// | // |
// 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 |
|
|
PtrList* _consumers; | PtrList* _consumers; |
}; | }; |
| |
static struct timeval create_time = {0, 1}; |
static struct timeval deallocateWait = {15, 0}; |
static struct timeval destroy_time = {15, 0}; |
|
static struct timeval deadlock_time = {0, 0}; |
|
| |
| |
CIMListenerIndicationDispatcherRep::CIMListenerIndicationDispatcherRep() | CIMListenerIndicationDispatcherRep::CIMListenerIndicationDispatcherRep() |
:_thread_pool(new ThreadPool(0, "ListenerIndicationDispatcher", 0, 0, | :_thread_pool(new ThreadPool(0, "ListenerIndicationDispatcher", 0, 0, |
create_time, destroy_time, deadlock_time)) |
deallocateWait)) |
,_consumers(new PtrList()) | ,_consumers(new PtrList()) |
{ | { |
| |
} | } |
CIMListenerIndicationDispatcherRep::~CIMListenerIndicationDispatcherRep() | CIMListenerIndicationDispatcherRep::~CIMListenerIndicationDispatcherRep() |
{ | { |
if(_thread_pool!=NULL) |
|
{ |
|
_thread_pool->kill_dead_threads(); |
|
delete _thread_pool; | delete _thread_pool; |
} |
|
if(_consumers!=NULL) |
|
delete _consumers; | delete _consumers; |
} | } |
| |
|
|
url, | url, |
instance, | instance, |
contentLangs); | contentLangs); |
_thread_pool->allocate_and_awaken(event,deliver_routine); |
ThreadStatus rtn = _thread_pool->allocate_and_awaken(event,deliver_routine); |
|
|
|
if (rtn != PEGASUS_THREAD_OK) |
|
{ |
|
Logger::put(Logger::STANDARD_LOG, System::CIMSERVER, Logger::TRACE, |
|
"Not enough threads to allocate a worker to deliver the event. "); |
|
|
|
Tracer::trace(TRC_SERVER, Tracer::LEVEL2, |
|
"Could not allocate thread to deliver event. Instead using current thread."); |
|
delete event; |
|
throw Exception(MessageLoaderParms("Listener.CIMListenerIndicationDispatcher.CANNOT_ALLOCATE_THREAD", |
|
"Not enough threads to allocate a worker to deliver the event.")); |
|
} |
} | } |
} | } |
PEGASUS_THREAD_RETURN PEGASUS_THREAD_CDECL CIMListenerIndicationDispatcherRep::deliver_routine(void *param) | PEGASUS_THREAD_RETURN PEGASUS_THREAD_CDECL CIMListenerIndicationDispatcherRep::deliver_routine(void *param) |