void BufferManager::cleanUpNonReferencedBuffers(JNIEnv *jenv, bool enforce) { if (! enforce && ! replacedAparapiBuffer && ! replacedArrayBuffer) return; if (enforce || replacedAparapiBuffer) { for (std::vector<AparapiBuffer*>::iterator bufferIt = aparapiBufferList.begin(); bufferIt != aparapiBufferList.end(); bufferIt++) { AparapiBuffer* buffer = *bufferIt; if (! (buffer->hasReferences())) { cleanUp(*bufferIt, jenv); bufferIt = aparapiBufferList.erase(bufferIt); // erase returns the a new iterator, pointing to the next element. // for the last element, we point to .end(), on which incrementing // is invalid! if (bufferIt == aparapiBufferList.end()) break; } } } if (enforce || replacedArrayBuffer) { for (std::vector<ArrayBuffer*>::iterator bufferIt = arrayBufferList.begin(); bufferIt != arrayBufferList.end(); bufferIt++) { ArrayBuffer* buffer = *bufferIt; if (! (buffer->hasReferences())) { cleanUp(buffer, jenv); bufferIt = arrayBufferList.erase(bufferIt); // erase returns the a new iterator, pointing to the next element. // for the last element, we point to .end(), on which incrementing // is invalid! if (bufferIt == arrayBufferList.end()) break; } } } replacedAparapiBuffer = false; replacedArrayBuffer = false; }