59 lines
2.4 KiB
Diff
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(
|