@@ -24,6 +24,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
24
24
#include " ../jthread/jthread.h"
25
25
#include " ../jthread/jmutex.h"
26
26
#include " ../jthread/jmutexautolock.h"
27
+ #include " porting.h"
27
28
28
29
template <typename T>
29
30
class MutexedVariable
@@ -123,36 +124,38 @@ class RequestQueue
123
124
void add (Key key, Caller caller, CallerData callerdata,
124
125
ResultQueue<Key, T, Caller, CallerData> *dest)
125
126
{
126
- JMutexAutoLock lock (m_queue.getMutex ());
127
-
128
- /*
129
- If the caller is already on the list, only update CallerData
130
- */
131
- for (typename std::list< GetRequest<Key, T, Caller, CallerData> >::iterator
132
- i = m_queue.getList ().begin ();
133
- i != m_queue.getList ().end (); ++i)
134
127
{
135
- GetRequest<Key, T, Caller, CallerData> &request = *i;
136
-
137
- if (request.key == key)
128
+ JMutexAutoLock lock (m_queue.getMutex ());
129
+
130
+ /*
131
+ If the caller is already on the list, only update CallerData
132
+ */
133
+ for (typename std::list< GetRequest<Key, T, Caller, CallerData> >::iterator
134
+ i = m_queue.getList ().begin ();
135
+ i != m_queue.getList ().end (); ++i)
138
136
{
139
- for ( typename std::list< CallerInfo<Caller, CallerData, Key, T> >::iterator
140
- i = request. callers . begin ();
141
- i != request.callers . end (); ++i )
137
+ GetRequest<Key, T, Caller, CallerData> &request = *i;
138
+
139
+ if ( request.key == key )
142
140
{
143
- CallerInfo<Caller, CallerData, Key, T> &ca = *i;
144
- if (ca.caller == caller)
141
+ for (typename std::list< CallerInfo<Caller, CallerData, Key, T> >::iterator
142
+ i = request.callers .begin ();
143
+ i != request.callers .end (); ++i)
145
144
{
146
- ca.data = callerdata;
147
- return ;
145
+ CallerInfo<Caller, CallerData, Key, T> &ca = *i;
146
+ if (ca.caller == caller)
147
+ {
148
+ ca.data = callerdata;
149
+ return ;
150
+ }
148
151
}
152
+ CallerInfo<Caller, CallerData, Key, T> ca;
153
+ ca.caller = caller;
154
+ ca.data = callerdata;
155
+ ca.dest = dest;
156
+ request.callers .push_back (ca);
157
+ return ;
149
158
}
150
- CallerInfo<Caller, CallerData, Key, T> ca;
151
- ca.caller = caller;
152
- ca.data = callerdata;
153
- ca.dest = dest;
154
- request.callers .push_back (ca);
155
- return ;
156
159
}
157
160
}
158
161
@@ -168,12 +171,17 @@ class RequestQueue
168
171
ca.dest = dest;
169
172
request.callers .push_back (ca);
170
173
171
- m_queue.getList ().push_back (request);
174
+ m_queue.push_back (request);
175
+ }
176
+
177
+ GetRequest<Key, T, Caller, CallerData> pop (unsigned int timeout_ms)
178
+ {
179
+ return m_queue.pop_front (timeout_ms);
172
180
}
173
181
174
- GetRequest<Key, T, Caller, CallerData> pop (bool wait_if_empty= false )
182
+ GetRequest<Key, T, Caller, CallerData> pop ()
175
183
{
176
- return m_queue.pop_front (wait_if_empty );
184
+ return m_queue.pop_frontNoEx ( );
177
185
}
178
186
179
187
void pushResult (GetRequest<Key, T, Caller, CallerData> req,
0 commit comments