tog-pegasus/pegasus-2.5.1-obz5072.patch

59 lines
2.4 KiB
Diff

--- pegasus/src/Pegasus/ProviderManager2/OOPProviderManagerRouter.cpp.obz5072 2006-05-31 12:18:40.000000000 -0400
+++ pegasus/src/Pegasus/ProviderManager2/OOPProviderManagerRouter.cpp 2006-05-31 13:09:56.000000000 -0400
@@ -97,18 +97,25 @@
{
public:
OutstandingRequestEntry(
- String messageId_,
+ String originalMessageId_,
CIMRequestMessage* requestMessage_,
CIMResponseMessage*& responseMessage_,
Semaphore* responseReady_)
- : messageId(messageId_),
+ : originalMessageId(originalMessageId_),
requestMessage(requestMessage_),
responseMessage(responseMessage_),
responseReady(responseReady_)
{
}
- String messageId;
+ /**
+ A unique value is substituted as the request messageId attribute to
+ allow responses to be definitively correllated with requests.
+ The original messageId value is stored here to avoid a race condition
+ between the processing of a response chunk and the resetting of the
+ original messageId in the request message.
+ */
+ String originalMessageId;
CIMRequestMessage* requestMessage;
CIMResponseMessage*& responseMessage;
Semaphore* responseReady;
@@ -931,7 +938,7 @@
i != 0; i++)
{
PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL2,
- String("Completing messageId \"") + i.value()->messageId +
+ String("Completing messageId \"") + i.key() +
"\" with a null response.");
i.value()->responseMessage = response;
i.value()->responseReady->signal();
@@ -1048,7 +1055,7 @@
//
Semaphore waitSemaphore(0);
OutstandingRequestEntry outstandingRequestEntry(
- uniqueMessageId, request, response, &waitSemaphore);
+ originalMessageId, request, response, &waitSemaphore);
//
// Lock the Provider Agent Container while initializing the
@@ -1343,7 +1350,7 @@
// Put the original message ID into the response
response->messageId =
- _outstandingRequestEntry->requestMessage->messageId;
+ _outstandingRequestEntry->originalMessageId;
// Call the response chunk callback to process the chunk
_responseChunkCallback(