Exemplo n.º 1
0
 void run()
 {
     while (!isCancelRequested())
     {
         capu::Thread::Sleep(10);
     }
 }
Exemplo n.º 2
0
 void run()
 {
     capu::AtomicOperation::AtomicAdd(Globals::var, 5);
     m_semaphore.release();
     while (!isCancelRequested())
     {
         capu::Thread::Sleep(10);
     }
 }
Exemplo n.º 3
0
 void run()
 {
     do
     {
         variable++;
         EXPECT_EQ(capu::CAPU_OK, capu::Thread::Sleep(100));
     }
     while (!isCancelRequested());
 }
Exemplo n.º 4
0
 void
 AsynchronousLogger::run()
 {
     while(!isCancelRequested())
     {
         LogMessage message;
         if(CAPU_OK == m_logQueue.pop(&message, 100))
         {
             Logger::log(message);
         }
     }
 }
Exemplo n.º 5
0
void capu::ThreadPool::PoolRunnable::run()
{
    while (!isCancelRequested())
    {
        status_t result;
        shared_ptr<Runnable> r;
        {
            ScopedMutexLock lock(mPool.mMutex);
            while (mPool.mRunnableQueue.empty() && !mPool.isClosed())
            {
                if (mPool.mCloseRequested)
                {
                    // if queue is empty and close was requested
                    // set closed flag and exit
                    mPool.mClosed = true;
                    break;
                }
                mPool.mCV.wait(mPool.mMutex); // block until a job is available
            }
            if (mPool.isClosed())
            {
                break;
            }
            result = mPool.mRunnableQueue.pop(&r);
        }
        if (result == CAPU_OK)
        {
            mCurrentRunnableMutex.lock();
            mCurrentRunnable = r.get();
            mCurrentRunnableMutex.unlock();
            if (mCurrentRunnable != NULL)
            {
                mCurrentRunnable->run();
                mCurrentRunnableMutex.lock();
                mCurrentRunnable = NULL;
                mCurrentRunnableMutex.unlock();
            }
        }
    }
}
Exemplo n.º 6
0
void LinkBackupThread::processDir(QDir& currentFromDir, QDir& currentToDir)
{
  long numErrors = getLogger().errorCount();
  if (numErrors > 1000)
  {
    QString errorMessage = QString("%1 errors found, quit?");
    QMessageBox::StandardButton reply = QMessageBox::question(nullptr, "Test", errorMessage, QMessageBox::Yes|QMessageBox::No);
      if (reply == QMessageBox::Yes) {
        requestCancel();
      } else {
        getLogger().clearErrorCount();
      }
  }

  TRACE_MSG(QString("Processing directory %1").arg(currentFromDir.canonicalPath()), 1);
  // Process directories, then process files.
  QList<QFileInfo> list = currentFromDir.entryInfoList(QDir::Dirs | QDir::NoDotAndDotDot | QDir::NoSymLinks | QDir::Hidden | QDir::Readable);
  QFileInfo info;
  foreach (info, list) {
    if (isCancelRequested()) {
      return;
    }
    TRACE_MSG(QString("Found Dir to processes %1").arg(info.canonicalFilePath()), 2);
    if (passes(info))
    {
      DEBUG_MSG(QString("Dir Passes: %1").arg(info.canonicalFilePath()), 2);
      if (!currentToDir.mkdir(info.fileName())) {
        ERROR_MSG(QString("Failed to create directory %1/%2").arg(currentToDir.canonicalPath(), info.fileName()), 1);
      } else if (!currentToDir.cd(info.fileName())) {
        ERROR_MSG(QString("Failed to cd to directory %1/%2").arg(currentToDir.canonicalPath(), info.fileName()), 1);
      } else if (!currentFromDir.cd(info.fileName())) {
        ERROR_MSG(QString("Failed to cd to directory %1/%2").arg(currentFromDir.canonicalPath(), info.fileName()), 1);
        if (!currentToDir.cdUp()) {
          ERROR_MSG("Failed to cd up a directory for the to directory", 1);
          requestCancel();
          return;
        }
      } else {
        processDir(currentFromDir, currentToDir);
        if (!currentToDir.cdUp()) {
          ERROR_MSG("Failed to cd up a directory for the to directory", 1);
          requestCancel();
          return;
        }
        if (!currentFromDir.cdUp()) {
          ERROR_MSG("Failed to cd up a directory for the from directory", 1);
          requestCancel();
          return;
        }
      }
    }
    else
    {
      DEBUG_MSG(QString("Skipping Dir: %1").arg(info.canonicalFilePath()), 2);
    }
  }
  // Now handle files
  list = currentFromDir.entryInfoList(QDir::Files | QDir::NoSymLinks | QDir::Hidden | QDir::Readable);
  foreach (info, list) {
    if (isCancelRequested()) {
      return;
    }
    QString fullPathFileToRead = info.canonicalFilePath();
    //TRACE_MSG(QString("Found File to test %1").arg(fullPathFileToRead), 2);
    if (passes(info))
    {
      //TRACE_MSG(QString("File passes %1").arg(fullPathFileToRead), 2);
      QFile fileToRead(fullPathFileToRead);
      // Just in case someone deleted the file.
      if (fileToRead.exists())
      {
        DBFileEntry* currentEntry = new DBFileEntry(info, m_fromDirWithoutTopDirName);
        const DBFileEntry* linkEntry = m_oldEntries->findEntry(m_backupSet.getCriteria(), currentEntry, m_fromDirWithoutTopDirName);

        QString pathToLinkFile = m_previousDirRoot;

        // If not in the old backup, search the current backup.
        if (linkEntry == nullptr)
        {
          linkEntry = m_currentEntries->findEntry(m_backupSet.getCriteria(), currentEntry, m_fromDirWithoutTopDirName);
          pathToLinkFile = m_toDirRoot;
        }

        if (linkEntry == nullptr)
        {
          bool failedToCopy = false;
          QString fullFileNameToWrite = m_toDirRoot + "/" + currentEntry->getPath();
          bool needHash = (currentEntry->getHash().length() == 0);
          if (needHash)
          {
            failedToCopy = !::getCopyLinkUtil().copyFileGenerateHash(fullPathFileToRead, fullFileNameToWrite);
            if (!failedToCopy)
            {
              currentEntry->setHash(getCopyLinkUtil().getLastHash());
            }
          }
          else if (!getCopyLinkUtil().copyFile(fullPathFileToRead, fullFileNameToWrite))
          {
            failedToCopy = true;
          }

          if (failedToCopy)
          {
            ERROR_MSG(QString(tr("EC %1")).arg(currentEntry->getPath()), 1);
          }
          else
          {
            INFO_MSG(QString(tr("C  %1")).arg(currentEntry->getPath()), 1);
            currentEntry->setLinkTypeCopy();
            m_currentEntries->addEntry(currentEntry);
            currentEntry = nullptr;
          }
        }
        else
        {
          if (getCopyLinkUtil().linkFile(pathToLinkFile + "/" + linkEntry->getPath(), m_toDirRoot + "/" + currentEntry->getPath()))
          {
            currentEntry->setLinkTypeLink();
            currentEntry->setHash(linkEntry->getHash());
            m_currentEntries->addEntry(currentEntry);
            INFO_MSG(QString(tr("L %1")).arg(currentEntry->getPath()), 1);
            currentEntry = nullptr;
          }
          else
          {
            ERROR_MSG(QString(tr("EL %1")).arg(currentEntry->getPath()), 1);
            ERROR_MSG(QString(tr("(%1)(%2)(%3)")).arg(pathToLinkFile, linkEntry->getPath(), m_toDirRoot), 1);
          }
        }
        if (currentEntry != nullptr)
        {
          delete currentEntry;
          currentEntry= nullptr;
        }
      }
    }
  }
  TRACE_MSG(QString("Finished with directory %1").arg(currentFromDir.canonicalPath()), 1);
}