void ProgramRegistry::registerProgram(ProcessId pid, int output, int port, std::string name) {
    stdx::lock_guard<stdx::recursive_mutex> lk(_mutex);
    verify(!isPidRegistered(pid));
    _portToPidMap.emplace(port, pid);
    _outputs.emplace(pid, output);
    _programNames.emplace(pid, name);
}
std::string ProgramRegistry::programName(ProcessId pid) const {
    stdx::lock_guard<stdx::recursive_mutex> lk(_mutex);
    if (!isPidRegistered(pid)) {
        // It could be that the program has attempted to log something before it was registered.
        return "sh";
    }
    return _programNames.find(pid)->second;
}
示例#3
0
void ProgramRegistry::registerProgram(ProcessId pid, int port) {
    stdx::lock_guard<stdx::recursive_mutex> lk(_mutex);
    invariant(!isPidRegistered(pid));
    _registeredPids.emplace(pid);
    if (port != -1) {
        _portToPidMap.emplace(port, pid);
    }
}
示例#4
0
 void ProgramRegistry::deletePid( pid_t pid ) {
     boost::recursive_mutex::scoped_lock lk( _mutex );
     if ( !isPidRegistered( pid ) ) {
         return;
     }
     close( _pids.find( pid )->second );
     _pids.erase( pid );
 }
void ProgramRegistry::deleteProgram(ProcessId pid) {
    stdx::lock_guard<stdx::recursive_mutex> lk(_mutex);
    if (!isPidRegistered(pid)) {
        return;
    }
    close(_outputs.find(pid)->second);
    _outputs.erase(pid);
    _programNames.erase(pid);
    _portToPidMap.erase(portForPid(pid));
}
示例#6
0
 void ProgramRegistry::deletePid(ProcessId pid) {
     boost::lock_guard<boost::recursive_mutex> lk(_mutex);
     if (!isPidRegistered(pid)) {
         int port = portForPid(pid);
         if (port < 0) return;
         deletePort(port);
         return;
     }
     close(_pids.find(pid)->second);
     _pids.erase(pid);
 }
示例#7
0
void ProgramRegistry::unregisterProgram(ProcessId pid) {
    stdx::lock_guard<stdx::recursive_mutex> lk(_mutex);
    invariant(isPidRegistered(pid));

    _outputReaderThreads[pid].join();

    // Remove the PID from the registry.
    _outputReaderThreads.erase(pid);
    _portToPidMap.erase(portForPid(pid));
    _registeredPids.erase(pid);
}
示例#8
0
 void ProgramRegistry::registerPid( ProcessId pid, int output ) {
     boost::lock_guard<boost::recursive_mutex> lk( _mutex );
     verify( !isPidRegistered( pid ) );
     _pids.insert( make_pair( pid, output ) );
 }
示例#9
0
void ProgramRegistry::registerReaderThread(ProcessId pid, stdx::thread reader) {
    stdx::lock_guard<stdx::recursive_mutex> lk(_mutex);
    invariant(isPidRegistered(pid));
    invariant(_outputReaderThreads.count(pid) == 0);
    _outputReaderThreads.emplace(pid, std::move(reader));
}
示例#10
0
 void ProgramRegistry::registerPid( pid_t pid, int output ) {
     boost::recursive_mutex::scoped_lock lk( _mutex );
     verify( !isPidRegistered( pid ) );
     _pids.insert( make_pair( pid, output ) );
 }