1 karl 1.7 //%2005////////////////////////////////////////////////////////////////////////
|
2 schuur 1.1 //
|
3 karl 1.6 // Copyright (c) 2000, 2001, 2002 BMC Software; Hewlett-Packard Development
4 // Company, L.P.; IBM Corp.; The Open Group; Tivoli Systems.
5 // Copyright (c) 2003 BMC Software; Hewlett-Packard Development Company, L.P.;
6 // IBM Corp.; EMC Corporation, The Open Group.
7 // Copyright (c) 2004 BMC Software; Hewlett-Packard Development Company, L.P.;
8 // IBM Corp.; EMC Corporation; VERITAS Software Corporation; The Open Group.
|
9 karl 1.7 // Copyright (c) 2005 Hewlett-Packard Development Company, L.P.; IBM Corp.;
10 // EMC Corporation; VERITAS Software Corporation; The Open Group.
|
11 schuur 1.1 //
12 // Permission is hereby granted, free of charge, to any person obtaining a copy
13 // of this software and associated documentation files (the "Software"), to
14 // deal in the Software without restriction, including without limitation the
15 // rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
16 // sell copies of the Software, and to permit persons to whom the Software is
17 // furnished to do so, subject to the following conditions:
|
18 mark.hamzy 1.9 //
|
19 schuur 1.1 // THE ABOVE COPYRIGHT NOTICE AND THIS PERMISSION NOTICE SHALL BE INCLUDED IN
20 // ALL COPIES OR SUBSTANTIAL PORTIONS OF THE SOFTWARE. THE SOFTWARE IS PROVIDED
21 // "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT
22 // LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
23 // PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
24 // HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
25 // ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
26 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
27 //
28 //==============================================================================
29 //
30 // Author: Chip Vincent (cvincent@us.ibm.com)
31 //
32 // Modified By: Yi Zhou, Hewlett-Packard Company(yi_zhou@hp.com)
33 // Mike Day IBM Corporation (mdday@us.ibm.com)
34 // Adrian Schuur, schuur@de.ibm.com
35 //
36 //%/////////////////////////////////////////////////////////////////////////////
37
38 #include "JMPILocalProviderManager.h"
39
40 schuur 1.1 #include <Pegasus/Common/Constants.h>
41 #include <Pegasus/Common/Tracer.h>
42 #include <Pegasus/Common/PegasusVersion.h>
43
44 #include <Pegasus/ProviderManager2/JMPI/JMPIProvider.h>
45 #include <Pegasus/ProviderManager2/JMPI/JMPIProviderModule.h>
46 #include <Pegasus/ProviderManager2/ProviderManagerService.h>
47
48 PEGASUS_USING_STD;
49 PEGASUS_NAMESPACE_BEGIN
50
|
51 mark.hamzy 1.9 int JMPILocalProviderManager::trace=0;
52
53 #ifdef PEGASUS_DEBUG
54 #define DDD(x) if (JMPILocalProviderManager::trace) x;
55 #else
56 #define DDD(x)
57 #endif
58
|
59 schuur 1.1 JMPILocalProviderManager::JMPILocalProviderManager(void)
|
60 kumpf 1.2 : _idle_timeout(IDLE_LIMIT)
|
61 schuur 1.1 {
|
62 mark.hamzy 1.9 #ifdef PEGASUS_DEBUG
63 if (getenv("PEGASUS_JMPI_TRACE"))
64 JMPILocalProviderManager::trace=1;
65 else
66 JMPILocalProviderManager::trace=0;
67 #else
68 JMPILocalProviderManager::trace=0;
69 #endif
|
70 schuur 1.1 }
71
72 JMPILocalProviderManager::~JMPILocalProviderManager(void)
73 {
74 Uint32 ccode;
75
76 _provider_ctrl(UNLOAD_ALL_PROVIDERS, this, &ccode);
77 }
78
79 Sint32 JMPILocalProviderManager::_provider_ctrl(CTRL code, void *parm, void *ret)
80 {
81 static Uint32 quantum;
82 PEG_METHOD_ENTER(TRC_PROVIDERMANAGER, "_provider_ctrl");
83
84 Sint32 ccode = 0;
85 CTRL_STRINGS *parms = reinterpret_cast<CTRL_STRINGS *>(parm);
86
87 switch(code)
88 {
89
90 case GET_PROVIDER:
91 schuur 1.1 {
|
92 mark.hamzy 1.9 PEG_TRACE_STRING(TRC_PROVIDERMANAGER,
93 Tracer::LEVEL2,
94 "_provider_ctrl::GET_PROVIDER");
95
96 String providerName = *(parms->providerName);
97 String moduleFileName = *(parms->fileName);
98 String interfaceName = *(parms->interfaceName);
99
100 DDD(PEGASUS_STD(cout)
101 <<"--- JMPILocalProviderManager::_provider_ctrl: GET_PROVIDER "
102 <<providerName
103 <<PEGASUS_STD(endl));
|
104 schuur 1.1
105 JMPIProvider::OpProviderHolder* ph =
|
106 mark.hamzy 1.9 reinterpret_cast< JMPIProvider::OpProviderHolder* >( ret );
107 JMPIProviderModule *newModule = NULL;
108 JMPIProviderModule *module = NULL;
109 JMPIProvider *newProvider = NULL;
110 JMPIProvider *provider = NULL;
111 ProviderVector base;
|
112 schuur 1.1
113 try
114 {
|
115 mark.hamzy 1.9 {
116 AutoMutex lock (_providerTableMutex);
|
117 schuur 1.1
|
118 mark.hamzy 1.9 if (true == _providers.lookup(providerName, provider))
119 {
120 PEG_TRACE_STRING(TRC_PROVIDERMANAGER,
121 Tracer::LEVEL4,
122 "Found JMPIProvider "
123 + providerName
124 + " in JMPIProvider Manager Cache");
125 DDD(PEGASUS_STD(cout)
126 <<"--- JMPILocalProviderManager::_provider_ctrl: Found "
127 <<providerName
128 <<" in JMPIProvider Manager Cache"
129 <<PEGASUS_STD(endl));
130 DDD(PEGASUS_STD(cout)
131 <<"--- JMPILocalProviderManager::_provider_ctrl:"
132 " setting provider to "
133 <<PEGASUS_STD(hex)
134 <<(int)provider
135 <<PEGASUS_STD(dec)
136 <<PEGASUS_STD(endl));
137
138 ph->SetProvider(provider);
139 mark.hamzy 1.9
140 //////////////////////ph->GetProvider().update_idle_timer();
141 break;
142 }
143
144 PEG_TRACE_STRING(TRC_PROVIDERMANAGER,
145 Tracer::LEVEL4,
146 "Creating JMPIProvider " + providerName );
147 DDD(PEGASUS_STD(cout)
148 <<"--- JMPILocalProviderManager::_provider_ctrl: Creating "
149 <<providerName
150 <<PEGASUS_STD(endl));
151
152 if (false == _modules.lookup(moduleFileName, module))
153 {
154 PEG_TRACE_STRING(TRC_PROVIDERMANAGER,
155 Tracer::LEVEL4,
156 "Creating JMPIProvider Module "
157 + moduleFileName );
158 DDD(PEGASUS_STD(cout)
159 <<"--- JMPILocalProviderManager::_provider_ctrl: "
160 mark.hamzy 1.9 "Creating module "
161 <<moduleFileName
162 <<PEGASUS_STD(endl));
163
164 newModule = new JMPIProviderModule(moduleFileName,
165 interfaceName);
166
167 if (0 == newModule)
168 {
169 PEG_TRACE_STRING(TRC_PROVIDERMANAGER,
170 Tracer::LEVEL4,
171 "new JMPIProviderModule is NULL!");
172 DDD(PEGASUS_STD(cout)
173 <<"--- JMPILocalProviderManager::_provider_ctrl:"
174 " new JMPIProviderModule is NULL!"
175 <<PEGASUS_STD(endl));
176
177 throw NullPointer();
178 }
179
180 module = newModule;
181 mark.hamzy 1.9
182 _modules.insert(moduleFileName, module);
183 }
184 else
185 {
186 PEG_TRACE_STRING(TRC_PROVIDERMANAGER,
187 Tracer::LEVEL4,
188 "Using Cached JMPIProvider Module "
189 + moduleFileName);
190 DDD(PEGASUS_STD(cout)
191 <<"--- JMPILocalProviderManager::_provider_ctrl: "
192 "Using cached "
193 <<moduleFileName
194 <<PEGASUS_STD(endl));
195 }
196 }
197
198 PEG_TRACE_STRING(TRC_PROVIDERMANAGER,
199 Tracer::LEVEL4,
200 "Loading/Linking JMPIProvider Module "
201 + moduleFileName );
202 mark.hamzy 1.9 DDD(PEGASUS_STD(cout)
203 <<"--- JMPILocalProviderManager::_provider_ctrl:"
204 " Loading/Linking module "
205 <<moduleFileName
206 <<PEGASUS_STD(endl));
207
208 try
209 {
210 base = module->load(moduleFileName);
211 }
212 catch(...)
213 {
214 PEG_TRACE_STRING(TRC_PROVIDERMANAGER,
215 Tracer::LEVEL4,
216 "Exception caught Loading/Linking"
217 " JMPIProvider Module "
218 + moduleFileName );
219 DDD(PEGASUS_STD(cout)
220 <<"--- JMPILocalProviderManager::_provider_ctrl: "
221 "Exception caught Loading/Linking module "
222 <<moduleFileName
223 mark.hamzy 1.9 <<PEGASUS_STD(endl));
224
225 throw;
226 }
227
228 // create provider module
229 newProvider = new JMPIProvider(providerName, module, &base);
230 if (0 == newProvider)
231 {
232 PEG_TRACE_STRING(TRC_PROVIDERMANAGER,
233 Tracer::LEVEL4,
234 "new JMPIProvider is NULL!");
235 DDD(PEGASUS_STD(cout)
236 <<"--- JMPILocalProviderManager::_provider_ctrl: "
237 "new JMPIProvider is NULL!"
238 <<PEGASUS_STD(endl));
239
240 throw NullPointer();
241 }
242
243 provider = newProvider;
244 mark.hamzy 1.9
245 if (0 == (provider->_cimom_handle = new CIMOMHandle()))
246 {
247 PEG_TRACE_STRING(TRC_PROVIDERMANAGER,
248 Tracer::LEVEL4,
249 "_cimom_handle is NULL!");
250 DDD(PEGASUS_STD(cout)
251 <<"--- JMPILocalProviderManager::_provider_ctrl:"
252 " _cimom_handle is NULL!"
253 <<PEGASUS_STD(endl));
254
255 throw NullPointer();
256 }
257
258 provider->_quantum = 0;
259
260 {
261 AutoMutex lock(provider->_statusMutex);
262
263 PEG_TRACE_STRING(TRC_PROVIDERMANAGER,
264 Tracer::LEVEL2,
265 mark.hamzy 1.9 "Loading JMPIProvider "
266 + provider->_name);
267 DDD(PEGASUS_STD(cout)
268 <<"--- JMPILocalProviderManager::_provider_ctrl:"
269 " Loading "
270 <<provider->_name
271 <<PEGASUS_STD(endl));
272 try
273 {
274 provider->initialize(*(provider->_cimom_handle));
275 }
276 catch(...)
277 {
278 PEG_TRACE_STRING(TRC_PROVIDERMANAGER,
279 Tracer::LEVEL4,
280 "Exception caught calling initialize!");
281 DDD(PEGASUS_STD(cout)
282 <<"--- JMPILocalProviderManager::_provider_ctrl:"
283 " Exception caught calling initialize!"
284 <<PEGASUS_STD(endl));
285
286 mark.hamzy 1.9 throw UninitializedObjectException();
287 }
288 }
289 }
290 catch (...)
291 {
292 if (newModule)
293 {
294 _modules.remove(moduleFileName);
295 }
296
297 delete newModule;
298
299 if (newProvider)
300 {
301 delete newProvider->_cimom_handle;
302 }
303
304 delete newProvider;
305
306 throw;
307 mark.hamzy 1.9 }
308
309
310 // provider->update_idle_timer();
311
312 _providers.insert(providerName, provider);
313
314 DDD(PEGASUS_STD(cout)
315 <<"--- JMPILocalProviderManager::_provider_ctrl:"
316 "setting provider to "
317 <<PEGASUS_STD(hex)
318 <<(int)provider
319 <<PEGASUS_STD(dec)
320 <<PEGASUS_STD(endl));
|
321 schuur 1.1
|
322 mark.hamzy 1.9 ph->SetProvider( provider );
|
323 schuur 1.1 break;
324 }
325
326 case UNLOAD_PROVIDER:
|
327 mark.hamzy 1.9 {
328 DDD(PEGASUS_STD(cout)
329 <<"--- JMPILocalProviderManager::_provider_ctrl: "
330 "UNLOAD_PROVIDER"
331 <<PEGASUS_STD(endl));
332 break;
|
333 schuur 1.1 }
334
335 case LOOKUP_PROVIDER:
336 {
|
337 mark.hamzy 1.9 PEG_TRACE_STRING(TRC_PROVIDERMANAGER,
338 Tracer::LEVEL2,
339 "_provider_ctrl::LOOKUP_PROVIDER");
340 DDD(PEGASUS_STD(cout)
341 <<"--- JMPILocalProviderManager::_provider_ctrl: "
342 "LOOKUP_PROVIDER "
343 <<*(parms->providerName)
344 <<PEGASUS_STD(endl));
345
346 AutoMutex lock (_providerTableMutex);
347
348 if (true == _providers.lookup(*(parms->providerName),
349 *(reinterpret_cast<JMPIProvider * *>(ret))))
350 {
351 PEG_TRACE_STRING(TRC_PROVIDERMANAGER,
352 Tracer::LEVEL4,
353 "Found JMPIProvider in cache: "
354 + *(parms->providerName));
|
355 schuur 1.1
|
356 mark.hamzy 1.9 ////////////////(*(reinterpret_cast<JMPIProvider * *>(ret)))->update_idle_timer();
|
357 schuur 1.1 }
358 else
359 {
|
360 mark.hamzy 1.9 PEG_TRACE_STRING(TRC_PROVIDERMANAGER,
361 Tracer::LEVEL4,
362 "Could not find JMPIProvider in cache: "
363 + *(parms->providerName));
|
364 schuur 1.1 ccode = -1;
365 }
366
367 break;
368 }
369
370 case LOOKUP_MODULE:
371 {
|
372 mark.hamzy 1.9 PEG_TRACE_STRING(TRC_PROVIDERMANAGER,
373 Tracer::LEVEL2,
374 "_provider_ctrl::LOOKUP_MODULE");
375 DDD(PEGASUS_STD(cout)
376 <<"--- JMPILocalProviderManager::_provider_ctrl: "
377 "LOOKUP_MODULE "
378 <<*(parms->fileName)
379 <<PEGASUS_STD(endl));
|
380 schuur 1.1
|
381 mark.hamzy 1.9 AutoMutex lock (_providerTableMutex);
|
382 schuur 1.1
|
383 mark.hamzy 1.9 if (false == _modules.lookup(*(parms->fileName),
|
384 schuur 1.1 *(reinterpret_cast<JMPIProviderModule * *>(ret))))
385 {
386 PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,
387 "Could not find JMPIProvider Module in cache: " +
388 *(parms->fileName));
389 ccode = -1;
390 }
391
392 break;
393 }
394
395 case INSERT_PROVIDER:
396 {
|
397 mark.hamzy 1.9 PEG_TRACE_STRING(TRC_PROVIDERMANAGER,
398 Tracer::LEVEL2,
399 "_provider_ctrl::INSERT_PROVIDER");
400 DDD(PEGASUS_STD(cout)
401 <<"--- JMPILocalProviderManager::_provider_ctrl: "
402 "INSERT_PROVIDER "
403 <<*(parms->providerName)
404 <<PEGASUS_STD(endl));
405
406 AutoMutex lock (_providerTableMutex);
|
407 schuur 1.1
|
408 mark.hamzy 1.9 if (false == _providers.insert(*(parms->providerName),
409 *reinterpret_cast<JMPIProvider * *>(parm)))
|
410 schuur 1.1 ccode = -1;
411 break;
412 }
|
413 mark.hamzy 1.9
|
414 schuur 1.1 case INSERT_MODULE:
415 {
|
416 mark.hamzy 1.9 PEG_TRACE_STRING(TRC_PROVIDERMANAGER,
417 Tracer::LEVEL2,
418 "_provider_ctrl::INSERT_MODULE");
419 DDD(PEGASUS_STD(cout)
420 <<"--- JMPILocalProviderManager::_provider_ctrl: "
421 "INSERT_MODULE "
422 <<*(parms->fileName)
423 <<PEGASUS_STD(endl));
424
425 AutoMutex lock (_providerTableMutex);
426
427 if(false == _modules.insert(*(parms->fileName),
428 *reinterpret_cast<JMPIProviderModule * *>(parm)))
|
429 schuur 1.1 ccode = -1;
430 break;
431 }
|
432 mark.hamzy 1.9
|
433 schuur 1.1 case REMOVE_PROVIDER:
434 {
|
435 mark.hamzy 1.9 PEG_TRACE_STRING(TRC_PROVIDERMANAGER,
436 Tracer::LEVEL2,
437 "_provider_ctrl::REMOVE_PROVIDER");
438 DDD(PEGASUS_STD(cout)
439 <<"--- JMPILocalProviderManager::_provider_ctrl: "
440 "REMOVE_PROVIDER "
441 <<*(parms->providerName)
442 <<PEGASUS_STD(endl));
|
443 schuur 1.1
|
444 mark.hamzy 1.9 AutoMutex lock (_providerTableMutex);
445
446 if (false == _providers.remove(*(parms->providerName)))
|
447 schuur 1.1 ccode = -1;
448 break;
449 }
|
450 mark.hamzy 1.9
|
451 schuur 1.1 case REMOVE_MODULE:
452 {
|
453 mark.hamzy 1.9 PEG_TRACE_STRING(TRC_PROVIDERMANAGER,
454 Tracer::LEVEL2,
455 "_provider_ctrl::REMOVE_MODULE");
456 DDD(PEGASUS_STD(cout)
457 <<"--- JMPILocalProviderManager::_provider_ctrl: REMOVE_MODULE "
458 <<*(parms->fileName)
459 <<PEGASUS_STD(endl));
|
460 schuur 1.1
|
461 mark.hamzy 1.9 AutoMutex lock (_providerTableMutex);
462
463 if (false == _modules.remove(*(parms->fileName)))
|
464 schuur 1.1 ccode = -1;
465 break;
466 }
467
468 case UNLOAD_ALL_PROVIDERS:
|
469 schuur 1.4 {
|
470 mark.hamzy 1.9 DDD(PEGASUS_STD(cout)
471 <<"--- JMPILocalProviderManager::_provider_ctrl: "
472 "UNLOAD_ALL_PROVIDERS"
473 <<PEGASUS_STD(endl));
474
|
475 schuur 1.4 JMPIjvm::destroyJVM();
|
476 mark.hamzy 1.9 break;
477 }
|
478 schuur 1.4
|
479 schuur 1.1 case UNLOAD_IDLE_PROVIDERS:
|
480 mark.hamzy 1.9 {
481 DDD(PEGASUS_STD(cout)
482 <<"--- JMPILocalProviderManager::_provider_ctrl: "
483 "UNLOAD_IDLE_PROVIDERS"
484 <<PEGASUS_STD(endl));
485 break;
|
486 schuur 1.1 }
487
488 case UNLOAD_IDLE_MODULES:
|
489 mark.hamzy 1.9 {
490 DDD(PEGASUS_STD(cout)
491 <<"--- JMPILocalProviderManager::_provider_ctrl: "
492 "UNLOAD_IDLE_MODULES"
493 <<PEGASUS_STD(endl));
494 break;
|
495 schuur 1.1 }
496
497 default:
|
498 mark.hamzy 1.9 {
499 DDD(PEGASUS_STD(cout)
500 <<"--- JMPILocalProviderManager::_provider_ctrl: unknown! "
501 <<code
502 <<PEGASUS_STD(endl));
503 ccode = -1;
504 break;
505 }
|
506 schuur 1.1 }
507 PEG_METHOD_EXIT();
508 return(ccode);
509 }
510
511 JMPIProvider * JMPILocalProviderManager::_getResolver
512 (const String & fileName, const String & interfaceType)
513 {
514 JMPIProvider *pr;
515 String id(interfaceType+String("::")+fileName);
516 if (true == _resolvers.lookup(id,pr)) {
517 return pr;
518 }
519 return NULL;
520 }
|
521 mark.hamzy 1.9
|
522 schuur 1.1 JMPIProvider::OpProviderHolder JMPILocalProviderManager::getProvider(
523 const String & fileName,
524 const String & providerName,
525 const String & interfaceName)
526 {
527 JMPIProvider::OpProviderHolder ph;
528 CTRL_STRINGS strings;
529 Sint32 ccode;
530 strings.fileName = &fileName;
531 strings.providerName = &providerName;
532 strings.interfaceName = &interfaceName;
533
|
534 mark.hamzy 1.9 PEG_METHOD_ENTER(TRC_PROVIDERMANAGER, "ProviderManager::getProvider");
535
|
536 schuur 1.1 try {
537 ccode = _provider_ctrl( GET_PROVIDER, &strings, &ph );
538 }
|
539 mark.hamzy 1.9 catch (const Exception &e) {
540 DDD(PEGASUS_STD(cout)
541 <<"--- JMPILocalProviderManager::getProvider: loading proxy: "
542 <<e.getMessage()
543 <<PEGASUS_STD(endl));
544 PEG_METHOD_EXIT();
|
545 schuur 1.1 throw;
|
546 mark.hamzy 1.9 }
|
547 schuur 1.1 catch(...) {
|
548 mark.hamzy 1.9 DDD(PEGASUS_STD(cout)
549 <<"--- JMPILocalProviderManager::getProvider: catch (...) "
550 <<PEGASUS_STD(endl));
|
551 schuur 1.1 PEG_METHOD_EXIT();
552 throw;
553 }
554
555 PEG_METHOD_EXIT();
556 return(ph);
557 }
558
559 void JMPILocalProviderManager::unloadProvider(
560 const String & fileName,
561 const String & providerName)
562 {
563 CTRL_STRINGS strings;
564 PEG_METHOD_ENTER(TRC_PROVIDERMANAGER, "ProviderManager::unloadProvider");
565 strings.fileName = &fileName;
566 strings.providerName = &providerName;
567 _provider_ctrl(UNLOAD_PROVIDER, &strings, (void *)0);
568 PEG_METHOD_EXIT();
569 }
570
571 void JMPILocalProviderManager::shutdownAllProviders(void)
572 schuur 1.1 {
573 PEG_METHOD_ENTER(TRC_PROVIDERMANAGER, "ProviderManager::shutdownAllProviders");
574 _provider_ctrl(UNLOAD_ALL_PROVIDERS, (void *)this, (void *)0);
575 PEG_METHOD_EXIT();
576 }
577
578
|
579 kumpf 1.2 Boolean JMPILocalProviderManager::hasActiveProviders()
|
580 schuur 1.1 {
|
581 mark.hamzy 1.9 PEG_METHOD_ENTER(TRC_PROVIDERMANAGER, "ProviderManager::hasActiveProviders");
582
583 AutoMutex lock (_providerTableMutex);
584
585 Boolean fRet = _providers.size() > 0;
|
586 kumpf 1.2
587 PEG_METHOD_EXIT();
|
588 mark.hamzy 1.9 return fRet;
|
589 kumpf 1.2 }
590
591 void JMPILocalProviderManager::unloadIdleProviders()
592 {
593 PEG_METHOD_ENTER(TRC_PROVIDERMANAGER,
594 "ProviderManager::unloadIdleProviders");
595
|
596 schuur 1.1 static struct timeval first = {0,0}, now, last = {0,0};
|
597 mark.hamzy 1.9
|
598 schuur 1.1 if(first.tv_sec == 0)
|
599 kumpf 1.2 {
|
600 schuur 1.1 gettimeofday(&first, NULL);
|
601 kumpf 1.2 }
|
602 schuur 1.1 gettimeofday(&now, NULL);
|
603 kumpf 1.2
604 if (((now.tv_sec - first.tv_sec) > IDLE_LIMIT) &&
605 ((now.tv_sec - last.tv_sec) > IDLE_LIMIT))
|
606 schuur 1.1 {
607 gettimeofday(&last, NULL);
|
608 kumpf 1.2 PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,
609 "Checking for Idle providers to unload.");
610 try
611 {
|
612 mark.hamzy 1.9 AutoMutex lock(_providerTableMutex);
613
|
614 kumpf 1.2 _provider_ctrl(UNLOAD_IDLE_PROVIDERS, this, (void *)0);
615 }
616 catch(...)
|
617 schuur 1.1 {
618 PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL2,
|
619 kumpf 1.2 "Caught unexpected exception from UNLOAD_IDLE_PROVIDERS.");
|
620 schuur 1.1 }
621 }
622 PEG_METHOD_EXIT();
623 }
624
|
625 carolann.graves 1.8 Array <JMPIProvider *>
626 JMPILocalProviderManager::getIndicationProvidersToEnable ()
627 {
628 PEG_METHOD_ENTER (TRC_PROVIDERMANAGER,
629 "JMPILocalProviderManager::getIndicationProvidersToEnable");
630
631 Array <JMPIProvider *> enableProviders;
632
633 try
634 {
635 AutoMutex lock (_providerTableMutex);
636
|
637 mark.hamzy 1.9 Tracer::trace (TRC_PROVIDERMANAGER, Tracer::LEVEL4,
638 "Number of providers in _providers table = %d", _providers.size ());
639
|
640 carolann.graves 1.8 //
641 // Iterate through the _providers table
642 //
643 for (ProviderTable::Iterator i = _providers.start (); i != 0; i++)
644 {
645 //
646 // Enable any indication provider with current subscriptions
647 //
648 JMPIProvider * provider = i.value ();
649 if (provider->testSubscriptions ())
650 {
651 enableProviders.append (provider);
652 }
653 }
654 }
655 catch (CIMException & e)
656 {
657 PEG_TRACE_STRING (TRC_DISCARDED_DATA, Tracer::LEVEL2,
658 "CIMException: " + e.getMessage ());
659 }
660 catch (Exception & e)
661 carolann.graves 1.8 {
662 PEG_TRACE_STRING (TRC_DISCARDED_DATA, Tracer::LEVEL2,
663 "Exception: " + e.getMessage ());
664 }
665 catch (...)
666 {
667 PEG_TRACE_STRING (TRC_DISCARDED_DATA, Tracer::LEVEL2,
668 "Unexpected error in getIndicationProvidersToEnable");
669 }
670
671 Tracer::trace (TRC_PROVIDERMANAGER, Tracer::LEVEL4,
672 "Number of indication providers to enable = %d",
673 enableProviders.size ());
674
675 PEG_METHOD_EXIT ();
676 return enableProviders;
677 }
678
679
|
680 schuur 1.1 PEGASUS_NAMESPACE_END
|