apply upstream bug fixes: 4629, 5073, 5090, 5180
This commit is contained in:
parent
2e1cbc6af6
commit
229df57cef
144
pegasus-2.5.1-obz5073.patch
Normal file
144
pegasus-2.5.1-obz5073.patch
Normal file
@ -0,0 +1,144 @@
|
||||
--- pegasus/src/Pegasus/Repository/AssocClassTable.cpp.obz5073 2006-01-30 11:18:20.000000000 -0500
|
||||
+++ pegasus/src/Pegasus/Repository/AssocClassTable.cpp 2006-06-12 13:13:18.000000000 -0400
|
||||
@@ -218,10 +218,6 @@
|
||||
fields.append(toClassName.getString());
|
||||
fields.append(toPropertyName.getString());
|
||||
|
||||
- for (Uint16 x=0; x<fields.size();x++)
|
||||
- {
|
||||
- fields[x].toLower();
|
||||
- }
|
||||
|
||||
_PutRecord(os, fields);
|
||||
|
||||
@@ -263,10 +259,6 @@
|
||||
fields.append(toClassName.getString());
|
||||
fields.append(toPropertyName.getString());
|
||||
|
||||
- for (Uint16 x=0; x<fields.size();x++)
|
||||
- {
|
||||
- fields[x].toLower();
|
||||
- }
|
||||
|
||||
_PutRecord(os, fields);
|
||||
|
||||
@@ -428,11 +420,6 @@
|
||||
// For each line in the associations table:
|
||||
while (_GetRecord(is, fields))
|
||||
{
|
||||
- // The cache key is always expected to be in lowercase
|
||||
- // While new association records are added in lowercase,
|
||||
- // the following line is required for compatibility
|
||||
- // with old repositories.
|
||||
- fields[FROM_CLASS_NAME_INDEX].toLower();
|
||||
cache->addRecord(fields[FROM_CLASS_NAME_INDEX],
|
||||
fields);
|
||||
}
|
||||
@@ -483,7 +470,6 @@
|
||||
for (Uint16 idx=0; idx < classList.size(); idx++)
|
||||
{
|
||||
String fromClassName = classList[idx].getString();
|
||||
- fromClassName.toLower();
|
||||
if (cache->getAssocClassEntry(fromClassName, records))
|
||||
{
|
||||
for (Uint16 rx=0; rx <records.size(); rx++)
|
||||
--- pegasus/src/Pegasus/Repository/AssocClassCache.h.obz5073 2006-01-30 11:18:20.000000000 -0500
|
||||
+++ pegasus/src/Pegasus/Repository/AssocClassCache.h 2006-06-12 13:13:18.000000000 -0400
|
||||
@@ -63,24 +63,24 @@
|
||||
/** Retrieve an entry for an association class through direct
|
||||
* access via the from class name.
|
||||
*/
|
||||
- Boolean getAssocClassEntry(const String& lowerCaseFromClassName,
|
||||
+ Boolean getAssocClassEntry(const String& fromClassName,
|
||||
Array< Array<String> >& entryList);
|
||||
|
||||
/** Add a new entry to the association cache.
|
||||
*/
|
||||
- Boolean addRecord(const String& lowerCaseFromClassName,
|
||||
+ Boolean addRecord(const String& fromClassName,
|
||||
Array<String> assocClassEntry);
|
||||
|
||||
/** Remove an entry from the association cache specified by the given
|
||||
* association class name.
|
||||
*/
|
||||
- Boolean removeEntry(const String& lowerCaseFromClassName);
|
||||
+ Boolean removeEntry(const String& fromClassName);
|
||||
|
||||
/** Remove an association record from the association cache specified by the given
|
||||
* from class name and association name.
|
||||
*/
|
||||
- Boolean removeRecord(const String& lowerCaseFromClassName,
|
||||
- const String& lowerCaseAssocClassName);
|
||||
+ Boolean removeRecord(const String& fromClassName,
|
||||
+ const String& assocClassName);
|
||||
|
||||
/** Check if the cache is loaded with objects already.
|
||||
*/
|
||||
--- pegasus/src/Pegasus/Repository/AssocClassCache.cpp.obz5073 2006-01-30 11:18:20.000000000 -0500
|
||||
+++ pegasus/src/Pegasus/Repository/AssocClassCache.cpp 2006-06-12 13:13:18.000000000 -0400
|
||||
@@ -86,9 +86,12 @@
|
||||
/** Retrieve the list of entries for a from class through direct
|
||||
* access via the from class name.
|
||||
*/
|
||||
-Boolean AssocClassCache::getAssocClassEntry(const String& lowerCaseFromClassName,
|
||||
+Boolean AssocClassCache::getAssocClassEntry(const String& fromClassName,
|
||||
Array< Array<String> >& entryList)
|
||||
{
|
||||
+ String lowerCaseFromClassName = fromClassName;
|
||||
+ lowerCaseFromClassName.toLower();
|
||||
+
|
||||
return _assocClassCache->lookup(lowerCaseFromClassName,entryList);
|
||||
}
|
||||
|
||||
@@ -97,10 +100,12 @@
|
||||
* the new entry is appended to the old entry. Otherwise a new entry
|
||||
* is added to the cache.
|
||||
*/
|
||||
-Boolean AssocClassCache::addRecord(const String& lowerCaseFromClassName,
|
||||
+Boolean AssocClassCache::addRecord(const String& fromClassName,
|
||||
Array<String> assocClassRecord)
|
||||
{
|
||||
Array< Array<String> > oldAssocClassEntryList;
|
||||
+ String lowerCaseFromClassName = fromClassName;
|
||||
+ lowerCaseFromClassName.toLower();
|
||||
|
||||
if (_assocClassCache->lookup(lowerCaseFromClassName, oldAssocClassEntryList))
|
||||
{
|
||||
@@ -115,18 +120,24 @@
|
||||
/** Remove an entry from the association cache specified by the given
|
||||
* from class name.
|
||||
*/
|
||||
-Boolean AssocClassCache::removeEntry(const String& lowerCaseFromClassName)
|
||||
+Boolean AssocClassCache::removeEntry(const String& fromClassName)
|
||||
{
|
||||
+ String lowerCaseFromClassName = fromClassName;
|
||||
+ lowerCaseFromClassName.toLower();
|
||||
+
|
||||
return _assocClassCache->remove(lowerCaseFromClassName);
|
||||
}
|
||||
|
||||
/** Remove an association record from the association cache specified by the given
|
||||
* from class name and association name.
|
||||
*/
|
||||
-Boolean AssocClassCache::removeRecord(const String& lowerCaseFromClassName,
|
||||
- const String& lowerCaseAssocClassName)
|
||||
+Boolean AssocClassCache::removeRecord(const String& fromClassName,
|
||||
+ const String& assocClassName)
|
||||
{
|
||||
Array< Array<String> > oldAssocClassEntryList;
|
||||
+ String lowerCaseFromClassName = fromClassName;
|
||||
+ lowerCaseFromClassName.toLower();
|
||||
+
|
||||
if (_assocClassCache->lookup(lowerCaseFromClassName, oldAssocClassEntryList))
|
||||
{
|
||||
for (Uint16 idx=0; idx < oldAssocClassEntryList.size(); idx++ )
|
||||
@@ -134,7 +145,8 @@
|
||||
// The first entry in each record is the association class
|
||||
// name. Find the record for the association class and remove
|
||||
// it from the cache entry.
|
||||
- if (oldAssocClassEntryList[idx][ASSOC_CLASS_NAME_INDEX] == lowerCaseAssocClassName)
|
||||
+ if (String::equalNoCase(oldAssocClassEntryList[idx][ASSOC_CLASS_NAME_INDEX],
|
||||
+ assocClassName))
|
||||
{
|
||||
_assocClassCache->remove(lowerCaseFromClassName);
|
||||
if (oldAssocClassEntryList.size() > 1)
|
46
pegasus-2.5.1-obz5090.patch
Normal file
46
pegasus-2.5.1-obz5090.patch
Normal file
@ -0,0 +1,46 @@
|
||||
--- pegasus/src/Pegasus/ProviderManager2/CMPI/CMPIProvider.cpp.obz5090 2006-01-30 11:18:04.000000000 -0500
|
||||
+++ pegasus/src/Pegasus/ProviderManager2/CMPI/CMPIProvider.cpp 2006-07-07 18:20:48.000000000 -0400
|
||||
@@ -297,19 +297,6 @@
|
||||
*/
|
||||
void CMPIProvider::_terminate(Boolean terminating)
|
||||
{
|
||||
- {
|
||||
- WriteLock writeLock (broker.rwsemClassCache);
|
||||
-
|
||||
- if (broker.clsCache) {
|
||||
- ClassCache::Iterator i=broker.clsCache->start();
|
||||
- for (; i; i++) {
|
||||
- delete i.value();
|
||||
- }
|
||||
- delete broker.clsCache;
|
||||
- broker.clsCache=NULL;
|
||||
- }
|
||||
- }
|
||||
-
|
||||
const OperationContext opc;
|
||||
CMPIStatus rc={CMPI_RC_OK,NULL};
|
||||
CMPI_ContextOnStack eCtx(opc);
|
||||
@@ -350,8 +337,23 @@
|
||||
if (rc.rc==CMPI_RC_ERR_NOT_SUPPORTED) noUnload=true;
|
||||
if ((rc.rc == CMPI_RC_DO_NOT_UNLOAD) || (rc.rc==CMPI_RC_NEVER_UNLOAD)) noUnload =true;
|
||||
}
|
||||
+
|
||||
if (noUnload == false)
|
||||
{
|
||||
+ // Cleanup the class cache
|
||||
+ {
|
||||
+ WriteLock writeLock (broker.rwsemClassCache);
|
||||
+
|
||||
+ if (broker.clsCache) {
|
||||
+ ClassCache::Iterator i=broker.clsCache->start();
|
||||
+ for (; i; i++) {
|
||||
+ delete i.value();
|
||||
+ }
|
||||
+ delete broker.clsCache;
|
||||
+ broker.clsCache=NULL;
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
// Check the thread list to make sure the thread has been de-allocated
|
||||
if (_threadWatchList.size() != 0)
|
||||
{
|
67
pegasus-2.5.1-obz5180.patch
Normal file
67
pegasus-2.5.1-obz5180.patch
Normal file
@ -0,0 +1,67 @@
|
||||
--- pegasus/src/Pegasus/Server/CIMOperationRequestDispatcher.cpp.obz5180 2006-07-07 18:19:11.000000000 -0400
|
||||
+++ pegasus/src/Pegasus/Server/CIMOperationRequestDispatcher.cpp 2006-07-07 19:03:51.000000000 -0400
|
||||
@@ -421,7 +421,18 @@
|
||||
CIMResponseMessage *&response)
|
||||
{
|
||||
static const char func[] = "CIMOperationRequestDispatcher::_enqueueResponse";
|
||||
- AutoMutex autoMut(_mut);
|
||||
+ // Obtain the _enqueueResponseMutex mutex for this chunked request.
|
||||
+ // This mutex is used to serialize chunked responses from all incoming
|
||||
+ // provider threads. It is imperative that the sequencing done by the
|
||||
+ // resequenceResponse() method and the writing of the chunked response
|
||||
+ // to the connection socket (done as a synchronous enqueue at the end
|
||||
+ // of this method) are atomic to ensure that the chunk that is marked
|
||||
+ // as isComplete for the overall response is indeed the last chunk
|
||||
+ // returned to the client. See PEP 140 for details.
|
||||
+ // This mutex was moved into the OperationAggregate class as part of
|
||||
+ // bug 4629 because we only need to serialize on a per-request basis.
|
||||
+ // This prevents serializing independent requests on separate connections.
|
||||
+ AutoMutex autoMut(poA->_enqueueResponseMutex);
|
||||
Boolean isComplete = false;
|
||||
|
||||
try
|
||||
@@ -550,13 +561,6 @@
|
||||
CIMException(CIM_ERR_FAILED, String(failMsg));
|
||||
}
|
||||
|
||||
- if (isComplete == true)
|
||||
- {
|
||||
- // also deletes the copied request attached to it
|
||||
- delete poA;
|
||||
- poA = 0;
|
||||
- }
|
||||
-
|
||||
// after sending, the response has been deleted externally
|
||||
response = 0;
|
||||
|
||||
@@ -1785,6 +1789,12 @@
|
||||
// the ENTIRE response to the request.
|
||||
|
||||
isComplete = service->_enqueueResponse(poA, response);
|
||||
+ if (isComplete)
|
||||
+ {
|
||||
+ // also deletes the copied request attached to it
|
||||
+ delete poA;
|
||||
+ poA = 0;
|
||||
+ }
|
||||
|
||||
PEG_METHOD_EXIT();
|
||||
}
|
||||
--- pegasus/src/Pegasus/Server/CIMOperationRequestDispatcher.h.obz5180 2006-02-10 14:13:47.000000000 -0500
|
||||
+++ pegasus/src/Pegasus/Server/CIMOperationRequestDispatcher.h 2006-07-07 19:00:43.000000000 -0400
|
||||
@@ -159,6 +159,7 @@
|
||||
*/
|
||||
class PEGASUS_SERVER_LINKAGE OperationAggregate
|
||||
{
|
||||
+ friend class CIMOperationRequestDispatcher;
|
||||
public:
|
||||
/* Operation Aggregate constructor. Builds an aggregate
|
||||
object.
|
||||
@@ -227,6 +228,7 @@
|
||||
|
||||
Array<CIMResponseMessage*> _responseList;
|
||||
Mutex _appendResponseMutex;
|
||||
+ Mutex _enqueueResponseMutex;
|
||||
CIMRequestMessage* _request;
|
||||
Uint32 _totalIssued;
|
||||
Uint32 _magicNumber;
|
@ -41,7 +41,7 @@
|
||||
%endif
|
||||
|
||||
Version: 2.5.1
|
||||
Release: 8%{?LINUX_VERSION:.%{LINUX_VERSION}}
|
||||
Release: 10%{?LINUX_VERSION:.%{LINUX_VERSION}}
|
||||
Epoch: 2
|
||||
#
|
||||
Summary: OpenPegasus WBEM Services for Linux
|
||||
@ -94,6 +94,9 @@ Patch31: pegasus-2.5.1-obz5072.patch
|
||||
Patch32: pegasus-2.5.1-obz5083.patch
|
||||
Patch33: pegasus-2.5.1-obz5115.patch
|
||||
Patch34: pegasus-2.5.1-obz5119.patch
|
||||
Patch35: pegasus-2.5.1-obz5073.patch
|
||||
Patch36: pegasus-2.5.1-obz5090.patch
|
||||
Patch37: pegasus-2.5.1-obz5180.patch
|
||||
#
|
||||
Conflicts: openwbem
|
||||
Provides: tog-pegasus-cimserver
|
||||
@ -183,6 +186,9 @@ The OpenPegasus WBEM tests for the OpenPegasus %{version} Linux rpm.
|
||||
%patch32 -p1 -b .obz5083
|
||||
%patch33 -p1 -b .obz5115
|
||||
%patch34 -p1 -b .obz5119
|
||||
%patch35 -p1 -b .obz5073
|
||||
%patch36 -p1 -b .obz5090
|
||||
%patch37 -p1 -b .obz5180
|
||||
|
||||
%build
|
||||
rm -rf ${RPM_BUILD_ROOT} || :;
|
||||
@ -376,6 +382,13 @@ fi
|
||||
|
||||
|
||||
%changelog
|
||||
* Fri Jul 07 2006 Jason Vas Dias <jvdias@redhat.com> - 2:2.4.1-10
|
||||
- More upstream 2.5.2_APPROVED bug fixes:
|
||||
o 4629: Pegasus freezes when it is unable to send out completely, the results of a request
|
||||
o 5073: Class Names on Reference, ReferenceNames, Assoc, AssocNames returned lower case
|
||||
o 5090: cimserver crash on a request after attempting to unload idle CMPI providers
|
||||
o 5180: OperationAggregate deleted in _enqueueResponse while member mutex held
|
||||
|
||||
* Fri Jun 09 2006 Jason Vas Dias <jvdias@redhat.com> - 2:2.5.1-8
|
||||
- Fix bug 192754: remove multilib conflicts
|
||||
- More upstream 2.5.2_APPROVED bug fixes:
|
||||
|
Loading…
Reference in New Issue
Block a user