Todo List
- Namespace iox
this might be needed to be public when the logger is used in templates
this might be needed to be public when the logger is used in templates
- Member iox::MAX_CLIENTS_PER_SERVER
- Member iox::mepoo::ChunkManagement::m_mempool
optimization: check if this can be replaced by an offset relative to the this pointer
- Member iox::mepoo::SharedChunk::operator== (const void *const rhs) const noexcept
use the newtype pattern to avoid the void pointer
- Class iox::popo::ChunkDistributor< ChunkDistributorDataType >
There are currently some challenge: For the stored queues and the history, containers are used which are not thread safe. Therefore we use an inter-process mutex. But this can lead to deadlocks if a user process gets terminated while one of its threads is in the ChunkDistributor and holds a lock. An easier setup would be if changing the queues by a middleware thread and sending chunks by the user process would not interleave. I.e. there is no concurrent access to the containers. Then a memory synchronization would be sufficient. The cleanup() call is the biggest challenge. This is used to free chunks that are still held by a not properly terminated user application. Even if access from middleware and user threads do not overlap, the history container to cleanup could be in an inconsistent state as the application was hard terminated while changing it. We would need a container like the UsedChunkList to have one that is robust against such inconsistencies…. A perfect job for our future selves
- Member iox::popo::ChunkDistributorData< ChunkDistributorDataProperties, LockingPolicy, ChunkQueuePusherType >::HistoryContainer_t
If we would make the ChunkDistributor lock-free, can we than extend the UsedChunkList to be like a ring buffer and use this for the history? This would be needed to be able to safely cleanup. Using ShmSafeUnmanagedChunk since RouDi must access this list to cleanup the chunks in case of an application crash.
- Member iox::popo::SubscriberPortData::ChunkQueueData_t
iox#1051 remove these aliases here and only depend on pub_sub_port_types.hpp (move relevant types and constants there)
- Namespace iox::roudi
Move everything in this namespace to iceoryx_roudi_types.hpp once we move RouDi to a separate CMake target
- Member iox::roudi::PortManager::stopPortIntrospection () noexcept
Remove this later
- Member iox::roudi::PortPool::getPublisherPortDataList () noexcept
don’t create the vector with each call but only when the data really change there could be a member “cxx::vector<popo::PublisherPortData* m_publisherPorts;” and publisherPorts() would just update this member if the publisher ports actually changed
- Member iox::roudi::PortPoolMemoryBlock::PortPoolMemoryBlock () noexcept=default
the PortPool needs to be refactored to use a typed MemPool once that is done, the cTor needs a configuration similar to MemPoolCollectionMemoryProvider