MCPcopy Create free account
hub / github.com/FirebirdSQL/firebird / getWorkItem

Method getWorkItem

src/burp/BurpTasks.cpp:233–288  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

231}
232
233bool BackupRelationTask::getWorkItem(BackupRelationTask::WorkItem** pItem)
234{
235 Item* item = static_cast<Item*>(*pItem);
236
237 MutexLockGuard guard(m_mutex, FB_FUNCTION);
238
239 // if writer ask for new item - its done
240 if (item && item->m_writer)
241 {
242 item->m_inuse = false;
243 (*pItem) = NULL;
244 return false;
245 }
246
247 const bool newReader = (item == NULL);
248
249 if (item == NULL && !m_readDone)
250 {
251 for (Item** p = m_items.begin(); p < m_items.end(); p++)
252 {
253 if (!(*p)->m_inuse)
254 {
255 (*p)->m_inuse = true;
256 *pItem = item = *p;
257 break;
258 }
259 }
260 }
261
262 if (!item)
263 return false;
264
265 if (item->m_writer)
266 return true;
267
268 item->m_inuse = (m_nextPP <= m_relation->rel_max_pp);
269
270 if (item->m_inuse)
271 {
272 item->m_ppSequence = m_nextPP;
273 if (m_metadata.haveInputs())
274 m_nextPP += 1;
275 else
276 m_nextPP = m_relation->rel_max_pp + 1;
277
278 if (newReader)
279 m_readers++;
280 }
281 else if (!newReader && --m_readers == 0)
282 {
283 m_readDone = true;
284 m_dirtyCond.notifyAll();
285 }
286
287 return (item && item->m_inuse);
288}
289
290bool BackupRelationTask::getResult(IStatus* /*status*/)

Callers

nothing calls this directly

Calls 5

haveInputsMethod · 0.80
notifyAllMethod · 0.80
beginMethod · 0.45
endMethod · 0.45
hasDataMethod · 0.45

Tested by

no test coverage detected