File tree Expand file tree Collapse file tree
Expand file tree Collapse file tree Original file line number Diff line number Diff line change 2323class Request : public Message {
2424private:
2525 Timer* mTimer ; // !< Timer associated with the request.
26- DLManager* mResourceList ;
26+ DLManager* mResourceList ; // !< DLL to store the Resources to be configured.
27+ uint64_t mSource ;
2728
2829public:
2930 Request ();
@@ -32,10 +33,12 @@ class Request : public Message {
3233 int32_t getResourcesCount ();
3334 Timer* getTimer ();
3435 DLManager* getResDlMgr ();
36+ uint64_t getSource ();
3537
3638 void addResource (ResIterable* resIterable);
3739 void setTimer (Timer* timer);
3840 void unsetTimer ();
41+ void setSource (uint64_t source);
3942 void clearResources ();
4043
4144 ErrCode deserialize (char * buf);
Original file line number Diff line number Diff line change 66Request::Request () {
77 this ->mTimer = nullptr ;
88 this ->mResourceList = nullptr ;
9+ this ->mSource = 0 ;
910}
1011
1112int32_t Request::getResourcesCount () {
@@ -24,6 +25,10 @@ DLManager* Request::getResDlMgr() {
2425 return this ->mResourceList ;
2526}
2627
28+ uint64_t Request::getSource () {
29+ return this ->mSource ;
30+ }
31+
2732void Request::addResource (ResIterable* resIterable) {
2833 if (this ->mResourceList == nullptr ) {
2934 try {
@@ -47,6 +52,10 @@ void Request::unsetTimer() {
4752 this ->mTimer = nullptr ;
4853}
4954
55+ void Request::setSource (uint64_t source) {
56+ this ->mSource = source;
57+ }
58+
5059void Request::clearResources () {
5160 if (this ->mResourceList != nullptr ) {
5261 DL_ITERATE (this ->mResourceList ) {
Original file line number Diff line number Diff line change @@ -94,22 +94,39 @@ int8_t RequestManager::requestMatch(Request* request) {
9494 // If it is, we can use multiple threads from the pool for faster checking
9595
9696 for (int64_t handle: *clientHandles) {
97- Request* targetRequest = this ->mActiveRequests [handle].first ;
97+ int8_t requestProcessingStatus = this ->getRequestProcessingStatus (handle);
98+ if (requestProcessingStatus == REQ_NOT_FOUND ) {
99+ continue ;
100+ }
101+
102+ // Only check for requests which haven't been completed or cancelled
103+ if ((requestProcessingStatus & REQ_CANCELLED ) || (requestProcessingStatus & REQ_COMPLETED )) {
104+ continue ;
105+ }
106+
107+ auto it = this ->mActiveRequests .find (handle);
108+ if (it == this ->mActiveRequests .end ()) continue ;
109+ Request* targetRequest = it->second .first ;
98110 if (targetRequest == nullptr ) {
99111 continue ;
100112 }
101113
114+ if (request->getSource () != targetRequest->getSource ()) {
115+ continue ;
116+ }
117+
102118 // Check that the Number of Resources in the requests are the same
103119 if (request->getResourcesCount () != targetRequest->getResourcesCount ()) {
104- return false ;
120+ continue ;
105121 }
106122
107123 if (!request->getResDlMgr ()->matchAgainst (targetRequest->getResDlMgr (), resourceCmpPolicy)) {
108- return false ;
124+ continue ;
109125 }
126+ return true ;
110127 }
111128
112- return true ;
129+ return false ;
113130}
114131
115132int8_t RequestManager::verifyHandle (int64_t handle) {
Original file line number Diff line number Diff line change @@ -125,6 +125,11 @@ static Request* createResourceTuningRequest(Signal* signal) {
125125 request->setProperties (signal->getProperties ());
126126 request->setClientPID (signal->getClientPID ());
127127 request->setClientTID (signal->getClientTID ());
128+ request->setSource (
129+ CONSTRUCT_SIG_CODE (
130+ signal->getSignalCode (),
131+ signal->getSignalType ())
132+ );
128133
129134 std::vector<Resource*>* signalLocks = signalInfo->mSignalResources ;
130135
You can’t perform that action at this time.
0 commit comments