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
|
%endif
|
||||||
|
|
||||||
Version: 2.5.1
|
Version: 2.5.1
|
||||||
Release: 8%{?LINUX_VERSION:.%{LINUX_VERSION}}
|
Release: 10%{?LINUX_VERSION:.%{LINUX_VERSION}}
|
||||||
Epoch: 2
|
Epoch: 2
|
||||||
#
|
#
|
||||||
Summary: OpenPegasus WBEM Services for Linux
|
Summary: OpenPegasus WBEM Services for Linux
|
||||||
@ -94,6 +94,9 @@ Patch31: pegasus-2.5.1-obz5072.patch
|
|||||||
Patch32: pegasus-2.5.1-obz5083.patch
|
Patch32: pegasus-2.5.1-obz5083.patch
|
||||||
Patch33: pegasus-2.5.1-obz5115.patch
|
Patch33: pegasus-2.5.1-obz5115.patch
|
||||||
Patch34: pegasus-2.5.1-obz5119.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
|
Conflicts: openwbem
|
||||||
Provides: tog-pegasus-cimserver
|
Provides: tog-pegasus-cimserver
|
||||||
@ -183,6 +186,9 @@ The OpenPegasus WBEM tests for the OpenPegasus %{version} Linux rpm.
|
|||||||
%patch32 -p1 -b .obz5083
|
%patch32 -p1 -b .obz5083
|
||||||
%patch33 -p1 -b .obz5115
|
%patch33 -p1 -b .obz5115
|
||||||
%patch34 -p1 -b .obz5119
|
%patch34 -p1 -b .obz5119
|
||||||
|
%patch35 -p1 -b .obz5073
|
||||||
|
%patch36 -p1 -b .obz5090
|
||||||
|
%patch37 -p1 -b .obz5180
|
||||||
|
|
||||||
%build
|
%build
|
||||||
rm -rf ${RPM_BUILD_ROOT} || :;
|
rm -rf ${RPM_BUILD_ROOT} || :;
|
||||||
@ -376,6 +382,13 @@ fi
|
|||||||
|
|
||||||
|
|
||||||
%changelog
|
%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
|
* Fri Jun 09 2006 Jason Vas Dias <jvdias@redhat.com> - 2:2.5.1-8
|
||||||
- Fix bug 192754: remove multilib conflicts
|
- Fix bug 192754: remove multilib conflicts
|
||||||
- More upstream 2.5.2_APPROVED bug fixes:
|
- More upstream 2.5.2_APPROVED bug fixes:
|
||||||
|
Loading…
Reference in New Issue
Block a user