Пример #1
0
void MpiRequestPool::testDetachedRequests() {
  MPI_Status status;
  auto it = detached.begin();
  while (it != detached.end()) {
    Request* r = *it;
    int flag;
    int ierr = MPI_Test(&r->req, &flag, &status);
    assert(!ierr);
    // Request has completed
    if (flag) {
      it = processCompletedRequest(it);
    } else {
      ++it;
    }
  }
}
Пример #2
0
// private 
// runs in main thread
void
MovieLoader::processCompletedRequests()
{
    //GNASH_REPORT_FUNCTION;

    for (;;) {

#ifdef GNASH_DEBUG_LOCKING
        log_debug("processCompletedRequests: lock on requests: trying");
#endif

        boost::mutex::scoped_lock requestsLock(_requestsMutex);

#ifdef GNASH_DEBUG_LOCKING
        log_debug("processCompletedRequests: lock on requests: obtained");
#endif

#ifdef GNASH_DEBUG_LOADMOVIE_REQUESTS_PROCESSING
        log_debug("Checking %d requests for completeness",
            _requests.size());
#endif

        Requests::iterator endIt = _requests.end();
        Requests::iterator it = find_if(_requests.begin(), endIt,
                                        boost::bind(&Request::completed, _1));

        // Releases scoped lock.
        if (it == endIt) break;

#ifdef GNASH_DEBUG_LOCKING
        log_debug("processCompletedRequests: lock on requests: releasing");
#endif
        requestsLock.unlock();

        Request& firstCompleted = *it;

#ifdef GNASH_DEBUG_LOADMOVIE_REQUESTS_PROCESSING
        log_debug("Load request for target %s completed",
            firstCompleted->getTarget());
#endif

        bool checkit = processCompletedRequest(firstCompleted);
        assert(checkit);

#ifdef GNASH_DEBUG_LOCKING
        log_debug("processCompletedRequests: lock on requests for removal: "
                  "trying");
#endif

        requestsLock.lock();

#ifdef GNASH_DEBUG_LOCKING
        log_debug("processCompletedRequests: lock on requests for removal: "
                  "obtained");
#endif

        _requests.erase(it);

#ifdef GNASH_DEBUG_LOCKING
        log_debug("processCompletedRequests: lock on requests for removal: "
                  "release");
#endif
    }
}