@@ -297,8 +297,8 @@ using DeferredFiles = std::vector<DeferredFile>;
297
297
// the process is not stalled waiting on disk buffer i/o.
298
298
void multiThreadedPageInBackground (const DeferredFiles &deferred) {
299
299
static size_t pageSize = Process::getPageSizeEstimate (), totalBytes;
300
+ static std::mutex mutex;
300
301
size_t index = 0 ;
301
- std::mutex mutex;
302
302
303
303
parallelFor (0 , config->readThreads , [&](size_t I) {
304
304
while (true ) {
@@ -324,34 +324,34 @@ void multiThreadedPageInBackground(const DeferredFiles &deferred) {
324
324
<< deferred.size () << " \n " ;
325
325
}
326
326
327
- static void multiThreadedPageIn (const DeferredFiles &deferred) {
327
+ static void
328
+ multiThreadedPageIn (const DeferredFiles &deferred = DeferredFiles()) {
328
329
static std::thread *running;
329
330
static std::mutex mutex;
330
331
static std::deque<DeferredFiles *> queue;
331
332
332
333
mutex.lock ();
333
- if (running) {
334
+ if (running && (queue. empty () || deferred. empty ()) ) {
334
335
running->join ();
335
336
delete running;
336
337
running = nullptr ;
337
338
}
338
339
339
340
if (!deferred.empty ()) {
340
341
queue.emplace_back (new DeferredFiles (deferred));
341
- running = new std::thread ([&]() {
342
- while ( true ) {
342
+ if (!running)
343
+ running = new std::thread ([&]( ) {
343
344
mutex.lock ();
344
- if (queue.empty ()) {
345
+ while (!queue.empty ()) {
346
+ DeferredFiles *deferred = queue.front ();
345
347
mutex.unlock ();
346
- return ;
348
+ multiThreadedPageInBackground (*deferred);
349
+ delete deferred;
350
+ mutex.lock ();
351
+ queue.pop_front ();
347
352
}
348
- DeferredFiles *deferred = queue.front ();
349
- queue.pop_front ();
350
353
mutex.unlock ();
351
- multiThreadedPageInBackground (*deferred);
352
- delete deferred;
353
- }
354
- });
354
+ });
355
355
}
356
356
mutex.unlock ();
357
357
}
@@ -1413,8 +1413,8 @@ static void createFiles(const InputArgList &args) {
1413
1413
archive->addLazySymbols ();
1414
1414
}
1415
1415
1416
- // flush threads
1417
- multiThreadedPageIn (DeferredFiles () );
1416
+ // reap threads
1417
+ // multiThreadedPageIn();
1418
1418
}
1419
1419
}
1420
1420
0 commit comments