Пример #1
0
  std::vector<std::string> process()
  {
    std::srand(std::time(0));

    std::vector<CallbackData> dbs;
    std::vector<std::string> tortured_databases;

    dbs.emplace_back(CallbackData(tortured_databases, open_database("test1.db")));
    dbs.emplace_back(CallbackData(tortured_databases, open_database("test2.db")));
    dbs.emplace_back(CallbackData(tortured_databases, open_database("test3.db")));
    dbs.emplace_back(CallbackData(tortured_databases, open_database("test4.db")));
    dbs.emplace_back(CallbackData(tortured_databases, open_database("test5.db")));

    for (size_t i = 0; i<dbs.size(); ++i) {
      sqlite3_trace(dbs[i].db_, trace_callback, &dbs[i]);
    }

    for (size_t i = 0; i<dbs.size(); ++i) {
      torture_database(dbs[std::rand() % dbs.size()].db_);  
    }

    for (size_t i = 0; i<dbs.size(); ++i) {
      sqlite3_close(dbs[i].db_);
    }
    return tortured_databases;
  }
Пример #2
0
 void ReplicationExecutor::doOperationWithGlobalExclusiveLock(
         OperationContext* txn,
         const CallbackHandle& cbHandle) {
     boost::unique_lock<boost::mutex> lk(_mutex);
     if (_inShutdown)
         return;
     const WorkQueue::iterator iter = cbHandle._iter;
     const uint64_t generation = iter->generation;
     invariant(generation == cbHandle._generation);
     WorkItem work = *iter;
     iter->callback = CallbackFn();
     _freeQueue.splice(_freeQueue.begin(), _exclusiveLockInProgressQueue, iter);
     lk.unlock();
     {
         boost::lock_guard<boost::mutex> terribleLock(_terribleExLockSyncMutex);
         work.callback(CallbackData(this,
                                    cbHandle,
                                    (work.isCanceled ?
                                     Status(ErrorCodes::CallbackCanceled, "Callback canceled") :
                                     Status::OK()),
                                    txn));
     }
     lk.lock();
     signalEvent_inlock(work.finishedEvent);
 }
Пример #3
0
nsresult
WindowHook::RemoveHook(UINT nMsg, Callback callback, void *context) {
  CallbackData cbdata(callback, context);
  MessageData *data = Lookup(nMsg);
  if (!data)
    return NS_ERROR_UNEXPECTED;
  if (data->hook != cbdata)
    return NS_ERROR_UNEXPECTED;
  data->hook = CallbackData();

  DeleteIfEmpty(data);
  return NS_OK;
}
Пример #4
0
nsresult
WindowHook::AddHook(UINT nMsg, Callback callback, void *context) {
  MessageData *data = LookupOrCreate(nMsg);

  if (!data)
    return NS_ERROR_OUT_OF_MEMORY;

  // Ensure we don't overwrite another hook
  NS_ENSURE_TRUE(nullptr == data->hook.cb, NS_ERROR_UNEXPECTED);

  data->hook = CallbackData(callback, context);

  return NS_OK;
}
Пример #5
0
 void ReplicationExecutor::run() {
     _networkInterface->startup();
     _dblockWorkers.startThreads();
     std::pair<WorkItem, CallbackHandle> work;
     while ((work = getWork()).first.callback) {
         {
             boost::lock_guard<boost::mutex> lk(_terribleExLockSyncMutex);
             const Status inStatus = work.first.isCanceled ?
                 Status(ErrorCodes::CallbackCanceled, "Callback canceled") :
                 Status::OK();
             makeNoExcept(stdx::bind(work.first.callback,
                                     CallbackData(this, work.second, inStatus)))();
         }
         signalEvent(work.first.finishedEvent);
     }
     finishShutdown();
     _networkInterface->shutdown();
 }
Пример #6
0
//////////////////////////////////////////////////////////////////////////
// processCallbacks
void CsCore::processCallbacks()
{
	TPackageReadyCallbackListIterator It = PackageReadyCallbackList_.begin();

	while( It != PackageReadyCallbackList_.end() )
	{
		TPackageReadyCallback& CallbackData( *It );
		CsPackage* pPackage = findPackage( CallbackData.Package_ );
		if( pPackage != NULL &&
			pPackage->isReady() )
		{
			CallbackData.Callback_( pPackage, CallbackData.ID_ );
			It = PackageReadyCallbackList_.erase( It );
		}
		else
		{
			++It;
		}
	}
}
Пример #7
0
SSMRESULT CSensingEngine::registerContext(TypeofEvent callType, ISSMResource *pSSMResource,
        IEvent *pEvent)
{
    m_mtxRequestedContextData.lock();
    // if already exists
    if (m_requestedCallbackData.find(pSSMResource->type) != m_requestedCallbackData.end())
    {
        //m_requestedCallbackData.erase(m_requestedCallbackData.find(nameString));
        unregisterContext(callType, pSSMResource, pEvent);
    }
    else
    {
        m_requestedCallbackData[pSSMResource->type] = CallbackData(callType, pSSMResource->type, pEvent);
    }

    m_pContextExecutor->registerContext(callType, pSSMResource, this);

    m_mtxRequestedContextData.unlock();

    return SSM_S_OK;
}
Пример #8
0
nsresult
WindowHook::AddMonitor(UINT nMsg, Callback callback, void *context) {
  MessageData *data = LookupOrCreate(nMsg);
  return (data && data->monitors.AppendElement(CallbackData(callback, context)))
         ? NS_OK : NS_ERROR_OUT_OF_MEMORY;
}