Exemple #1
0
void Logger::storeLog(std::shared_ptr<StoredLog> && log)
{
    for (auto & loggerOutputData : mLoggerOutputsData)
    {
        if (LoggerLevel::Off != loggerOutputData.second.level)
        {
            switch (loggerOutputData.second.level)
            {
                case LoggerLevel::Info:
                {
                    if (ELogSeverity_Debug == log->severity)
                    {
                        break;
                    }
                }

                default:
                {
                    if (LoggerOutput::GuiTable == loggerOutputData.first)
                    {
                        std::lock_guard<std::mutex> lockGuard(mStoredLogsGuiTableMtx);
                        loggerOutputData.second.storedLogs.push_back(log);
                    }
                    else if (LoggerOutput::SnapshotFile == loggerOutputData.first)
                    {
                        std::lock_guard<std::mutex> lockGuard(mStoredLogsSnapshotFileMtx);
                        loggerOutputData.second.storedLogs.push_back(log);
                    }
                    break;
                }
            }
        }
    }
}
void function_thread(SharedQueue<PointersStack<Stream>* >& queue) {
    std::thread::id tid = std::this_thread::get_id();

    PointersStack<Stream>* stack;
    Stream* stream0, *stream1;
    
    while (queue.alive()) {
        {
            std::lock_guard<std::mutex> lockGuard(cout_mutex);
            std::cout << "Thread "
                      << std::hex << std::uppercase << tid
                      << std::nouppercase << std::dec
                      << " starting game" << std::endl;
        }
        
        stack = queue.subtract();

        stream0 = (*stack)[0];
        stream1 = (*stack)[1];

        // initial state
        stream0->send("whte");
        stream1->send("blck");

        // communication between clients
        std::string msg;
        for (;;) {
            msg = stream0->recv(MSG_SIZE);
            if (msg.length() < 1) break; // end of stream
            {
                std::lock_guard<std::mutex> lockGuard(cout_mutex);
                std::cout << "Thread "
                          << std::hex << std::uppercase << tid
                          << std::nouppercase << std::dec
                          << " white -> black";
                for (int i = 0; i < msg.length(); ++i)
                    std::cout << " " << (int)msg[i];
                std::cout << std::endl;
            }
            stream1->send(msg);

            msg = stream1->recv(MSG_SIZE);
            if (msg.length() < 1) break; // end of stream
            {
                std::lock_guard<std::mutex> lockGuard(cout_mutex);
                std::cout << "Thread "
                          << std::hex << std::uppercase << tid
                          << std::nouppercase << std::dec
                          << " black -> white";
                for (int i = 0; i < msg.length(); ++i)
                    std::cout << " " << (int)msg[i];
                std::cout << std::endl;
            }
            stream0->send(msg);
        }
        
        delete stack;
    }
}
// MANIPULATORS
bsl::shared_ptr<const Calendar>
CalendarCache::getCalendar(const char *calendarName)
{
    BSLS_ASSERT(calendarName);

    {
        bsls::BslLockGuard lockGuard(&d_lock);

        CacheIterator iter = d_cache.find(calendarName);

        if (iter != d_cache.end()) {

            if (!d_hasTimeOutFlag
             || !hasExpired(d_timeOut, iter->second.loadTime())) {
                return iter->second.get();                            // RETURN
            }
            else {
                d_cache.erase(iter);
            }
        }
    }

    // Load calendar identified by 'calendarName'.

    PackedCalendar packedCalendar;  // temporary, so use default allocator

    if (d_loader_p->load(&packedCalendar, calendarName)) {
        return bsl::shared_ptr<const Calendar>();                     // RETURN
    }

    // Create out-of-place calendar that will be managed by 'bsl::shared_ptr'.

    Calendar *calendarPtr = new (*d_allocator_p) Calendar(packedCalendar,
                                                          d_allocator_p);

    CalendarCache_Entry entry(calendarPtr, bsl::time(0), d_allocator_p);

    BSLS_ASSERT(static_cast<bsl::time_t>(-1) != entry.loadTime());

    // Insert newly-loaded calendar into cache if another thread hasn't done so
    // already.

    bsls::BslLockGuard lockGuard(&d_lock);

    ConstCacheIterator iter = d_cache.find(calendarName);

    // Here, we assume that the time elapsed between the last check and the
    // loading of the calendar is insignificant compared to the timeout, so we
    // will simply return the entry in the cache if it has been inserted by
    // another thread.

    if (iter != d_cache.end()) {
        return iter->second.get();                                    // RETURN
    }

    d_cache[calendarName] = entry;

    return entry.get();
}
	bool ExperimentManager::setInputDataSource(EInputDataSource inputDataSource)
	{
		std::lock_guard<std::mutex> lockGuard(mMtx);
		if (EExperimentState::Idle == mExperimentState)
		{
			mInputDataGenerator = InputDataGeneratorCreator::create(inputDataSource);
			if (EInputDataSource::ExternalFile == inputDataSource)
			{
				Logger::info("%s: Set input data source for: External File!", getLoggerPrefix().c_str());
				std::string filename = "";
				DSC::DataManager::getUnitAttribute(EUnitId_Heater, "TestDataInputFilename", filename);
				Logger::info("%s: File with inputData: %s.", getLoggerPrefix().c_str(), filename.c_str());
			}
			else
			{
				Logger::info("%s: Set input data source for: Uniform Distribution!", getLoggerPrefix().c_str());
			}
			mInputDataSource = inputDataSource;
			return true;
		}
		else
		{
			Logger::warning("%s: Experiment is running. Cannot change input data source!", getLoggerPrefix().c_str());
			return false;
		}
	}
        void SocketSet::removeSocket(client::Socket const *socket) {
            assert(NULL != socket);

            int socketId = socket->getSocketId();
            assert(socketId >= 0);

            bool found = false;

            if (socketId >= 0) {
                LockGuard lockGuard(accessLock);

                for (std::set<int>::const_iterator it = sockets.begin(); it != sockets.end(); it++) {
                    if (socketId == *it) { // found
                        sockets.erase(it);
                        found = true;
                        break;
                    }
                }
            }

            if (!found) {
                char msg[200];
                util::snprintf(msg, 200,
                               "[SocketSet::removeSocket] Socket with id %d  was not found among the sockets.",
                               socketId);
                util::ILogger::getLogger().finest(msg);
            }
        }
Exemple #6
0
void Logger::setLevel(LoggerOutput output, LoggerLevel level)
{
    std::lock_guard<std::mutex> lockGuard(mDataMtx);

    mLoggerOutputsData[output].level = level;
    updateLoggerTimerStates();
}
 size_t clear()
 {
     SpinLockGuard<Spin> lockGuard(m_spin);
     size_t size = m_list.size();
     m_list.clear();
     return size;
 }
Exemple #8
0
void GamepadInput::setAxis(const int32_t axisIndex, const float value)
{
    if (axisIndex < 0 || axisIndex >= VKTS_MAX_GAMEPAD_AXIS)
    {
        return;
    }

    std::lock_guard<std::mutex> lockGuard(mutexAxis);

    if (value < VKTS_AXIS_DEAD_ZONE && value > -VKTS_AXIS_DEAD_ZONE)
    {
        axis[axisIndex] = 0.0f;
    }
    else if (value > 0.0f)
    {
        axis[axisIndex] = (value - VKTS_AXIS_DEAD_ZONE)
                          / (1.0f - VKTS_AXIS_DEAD_ZONE);
    }
    else if (value < 0.0f)
    {
        axis[axisIndex] = (value + VKTS_AXIS_DEAD_ZONE)
                          / (1.0f - VKTS_AXIS_DEAD_ZONE);
    }
    else
    {
        axis[axisIndex] = 0.0f;
    }
}
nsresult OAuth2ThreadHelper::OnFailure(nsresult aError) {
  MOZ_ASSERT(NS_IsMainThread(), "Can't touch JS off-main-thread");
  MonitorAutoLock lockGuard(mMonitor);

  mOAuth2String.Truncate();
  mMonitor.Notify();
  return NS_OK;
}
	void ExperimentManager::validateInputData()
	{
		std::lock_guard<std::mutex> lockGuard(mMtx);
		if (mInputDataGenerator)
		{
			mInputDataGenerator->validateInputData();
		}
	}
void sumUp(unsigned long long& sum, const std::vector<int>& val, unsigned long long beg, unsigned long long end){
    unsigned long long tmpSum{};
    for (auto i= beg; i < end; ++i){
        tmpSum += val[i];
    }
    std::lock_guard<std::mutex> lockGuard(myMutex);
    sum+= tmpSum;
}
Exemple #12
0
VKAPI_ATTR VkBool32 VKAPI_CALL vktsDebugReportCallback(VkDebugReportFlagsEXT flags, VkDebugReportObjectTypeEXT objectType, uint64_t object, size_t location, int32_t messageCode, const char* pLayerPrefix, const char* pMessage, void* pUserData)
{
	std::lock_guard<std::mutex> lockGuard(g_debugMutex);

	logPrint(VKTS_LOG_INFO, "Debug: Flags 0x%x ObjectType %d Object %u Location %u MessageCode %d LayerPrefix '%s' Message '%s' UserData #%p", flags, objectType, object, location, messageCode, pLayerPrefix, pMessage, pUserData);

    return VK_TRUE;
}
 bool pushFront(const ElementType &value)
 {
     SpinLockGuard<Spin> lockGuard(m_spin);
     if (m_list.size() < m_capacityCap) {
         m_list.push_front(value);
         return true;
     }
     return false;
 }
Exemple #14
0
void ThreadPool::Run(const Task& rTask) {
	if (m_vThreads.empty()) {
		rTask();
	} else {
		MutexLockGuard lockGuard(m_Mutex);
		m_Queue.push_back(rTask);
		m_Cond.Notify();
	}
}
Exemple #15
0
void Logger::updateGuiTable()
{
    LoggerOutputData* loggerOutputData = nullptr;
    {
        std::lock_guard<std::mutex> lockGuard(mDataMtx);
        loggerOutputData = &(mLoggerOutputsData[LoggerOutput::GuiTable]);
    }

    std::lock_guard<std::mutex> lockGuard(mStoredLogsGuiTableMtx);
    for (const auto & storedLog : loggerOutputData->storedLogs)
    {
        if (mGuiTableLogCallback)
        {
            mGuiTableLogCallback(storedLog);
        }
    }
    loggerOutputData->storedLogs.clear();
}
nsresult OAuth2ThreadHelper::OnSuccess(const nsACString &aOAuth2String) {
  MOZ_ASSERT(NS_IsMainThread(), "Can't touch JS off-main-thread");
  MonitorAutoLock lockGuard(mMonitor);

  MOZ_ASSERT(mOAuth2Support, "Should not be here if no OAuth2 support");
  mOAuth2String = aOAuth2String;
  mMonitor.Notify();
  return NS_OK;
}
void LogManagerImplementation::removeLogger(std::shared_ptr<Logger> logger)
{
	std::lock_guard<std::mutex> lockGuard(m_loggerMutex);
	std::vector<std::shared_ptr<Logger>>::iterator it = std::find(m_loggers.begin(), m_loggers.end(), logger);
	if (it != m_loggers.end())
	{
		m_loggers.erase(it);
	}
}
Exemple #18
0
void KeyInput::resetKeys()
{
    std::lock_guard<std::mutex> lockGuard(mutex);

    for (int32_t keyIndex = 0; keyIndex < VKTS_MAX_KEYS; keyIndex++)
    {
        keys[keyIndex] = VK_FALSE;
    }
}
 ElementType popFront()
 {
     SpinLockGuard<Spin> lockGuard(m_spin);
     if (m_list.empty()) {
         return nullptr;
     }
     ElementType value = m_list.front();
     m_list.pop_front();
     return value;
 }
Exemple #20
0
int CalendarCache::invalidateAll()
{
    bsls::BslLockGuard lockGuard(&d_lock);

    const int numInvalidated = static_cast<int>(d_cache.size());

    d_cache.clear();

    return numInvalidated;
}
Exemple #21
0
void Logger::setLevel(LoggerLevel level)
{
    std::lock_guard<std::mutex> lockGuard(mDataMtx);
    for (auto & loggerOutputData : mLoggerOutputsData)
    {
        loggerOutputData.second.level = level;
    }

    updateLoggerTimerStates();
}
Exemple #22
0
float GamepadInput::getAxis(const int32_t axisIndex) const
{
    if (axisIndex < 0 || axisIndex >= VKTS_MAX_GAMEPAD_AXIS)
    {
        return 0.0f;
    }

    std::lock_guard<std::mutex> lockGuard(mutexAxis);

    return axis[axisIndex];
}
Exemple #23
0
void GamepadInput::setButton(const int32_t buttonIndex, const VkBool32 pressed)
{
    if (buttonIndex < 0 || buttonIndex >= VKTS_MAX_GAMEPAD_BUTTONS)
    {
        return;
    }

    std::lock_guard<std::mutex> lockGuard(mutexButtons);

    buttons[buttonIndex] = pressed;
}
Exemple #24
0
VkBool32 GamepadInput::getButton(const int32_t buttonIndex) const
{
    if (buttonIndex < 0 || buttonIndex >= VKTS_MAX_GAMEPAD_BUTTONS)
    {
        return VK_FALSE;
    }

    std::lock_guard<std::mutex> lockGuard(mutexButtons);

    return buttons[buttonIndex];
}
void EventLoopThread::threadFunc() {
	EventLoop eventLoop;
	
	{
		MutexLockGuard lockGuard(m_Mutex);
		m_pEventLoop = &eventLoop;
		m_Cond.Notify();
	}
	
	eventLoop.Loop();
}
Exemple #26
0
void KeyInput::setKey(const int32_t keyIndex, const VkBool32 pressed)
{
    if (keyIndex < 0 || keyIndex >= VKTS_MAX_KEYS)
    {
        return;
    }

    std::lock_guard<std::mutex> lockGuard(mutex);

    keys[keyIndex] = pressed;
}
Exemple #27
0
VkBool32 KeyInput::getKey(const int32_t keyIndex) const
{
    if (keyIndex < 0 || keyIndex >= VKTS_MAX_KEYS)
    {
        return VK_FALSE;
    }

    std::lock_guard<std::mutex> lockGuard(mutex);

    return keys[keyIndex];
}
Exemple #28
0
RecyclableHandlePool HandlePool::GetPool(Tag tag)
{
    std::lock_guard<std::mutex> lockGuard(s_mutex);
    if (tag != InvalidTag) {
        for (auto iter : s_pools) {
            if (iter.second.first->tag == tag) {
                ++iter.second.second;
                return RecyclableHandlePool(
                    iter.second.first, [](std::shared_ptr<HandlePool> &pool) {
                        std::lock_guard<std::mutex> lockGuard(s_mutex);
                        const auto &iter = s_pools.find(pool->path);
                        if (--iter->second.second == 0) {
                            s_pools.erase(iter);
                        }
                    });
            }
        }
    }
    return RecyclableHandlePool(nullptr, nullptr);
}
void connection_manager::stop()
{
	boost::mutex::scoped_lock lockGuard(mPoolMutex);

	BOOST_FOREACH(connection_pool_t::value_type & weakConnection, mConnectionPool)
	{
		if (connection_base_ptr connection = weakConnection.second.lock())
		{
			connection->stop();
		}
	}
}
Exemple #30
0
void Dispatcher::shutdown()
{
	Task* task = createTask([this]() {
		setState(THREAD_STATE_TERMINATED);
		taskSignal.notify_one();
	});

	std::lock_guard<std::mutex> lockGuard(taskLock);
	taskList.push_back(task);

	taskSignal.notify_one();
}