- Windows stat.rs, allowed to fail if file no longer exists
- Cargo nextest run -p iceoryx2 --test service_tests gracefully
- Service should not be in corrupted state when listed and currently being removed
posix::Mutex- Implement priority ceiling
- File::read_to_string & File::read_range_to_string, check that there are no invalid UTF-8 characters contained
- Verify ACL_LIST_CAPACITY in POSIX_config
- Unix datagram socket, sending credentials and file descriptors no longer works
- Was introduced with Rust 1.71.0
- Activate unit test below again fn
unix_datagram_socket_sending_receiving_with_max_supported_fd_and_credentials_works
MAX_NUMBER_OF_ENTRIESin shared_memory_directory/mod.rs can lead to stack overflow when too large inunsafe { files.write(FileReferenceSet::default()) };We require placement new!ptr->write(MaybeUninit<MyThing>::new()); (ptr as *mut MaybeUninit<MyThinkg>)->do_stuff_to_Initialize_yourself();
- Better interrupt signal handling. The interrupt signal shall be always propagated up to the user for better CTRL+C handling etc.
condition_variablehas spurious wakeups on windows since WaitOnAddress with a timeout does not really work. Remove ignore for windows from condition variable tests and fix problem.CTRL+cdoes not work in windows, all examples do not clean upDirectory,Path,FileName,FilePathcannot handle UTF-8 file namesDirectorypanics when a directory contains non-ascii (UTF-8) characters
- Windows:
publisher::zero_copy::publisher_block_when_unable_to_deliver_blocksseems to sometimes deadlock
- Document
- Service
- ?is publisher history tested?
- Test all QoS of all services, also with requirements when opening
- Write tests for
Sample&SampleMut - Fix platforms
- macOS
iceoryx2_bb_posix- Add timeout to
pthread_cond_timedwait
- Add timeout to
- Use concepts based on shared memory directory to circumvent to 30 char restriction on the shm name in macOS
- Use second shm for shm size storage of main shm in windows instead of file
- macOS
- Stale services when creator goes out of scope
- Add ability to create persistent service
- Add persistency flag in static storage
- Simplify Service (zero_copy/process_local)
ServiceStatehas new/drop to check for stale services
- When
OpenDynamicStorageFailure::IsMarkedForDestructionactivated then wait for some time and retry to create the service, only if open or create was used
- Add ability to create persistent service
- Event Messaging Pattern
- Introduce degradation callback for notifier, used when a connection to a listener could not be Established
- Make
Publisher::update_connectionsprivate
- Rename PortFactory<...> into Service<...> and make it easier to access by the
user
- ability to store it in vec etc
- Splitup
NamedConceptBuilderintoNamedConceptOpenerandNamedConceptCreatorhas_ownershiponly for creatorhas_ownership/release_ownershipshould be part of the NamedConceptMgmt- Introduce
acquire_ownershipinNamedConceptMgmt - Make Windows shm persistent first
- Event concept
process_localshould be based on a bitset, introduce max trigger id into event/notifier * Implement atomic bitset, with compile time capacity, atomic set and atomic exchange consume via callback- ?add ability to create Listener in a different process and open it later, excludes every socket variant?
KeepAliveofSubscriber/Publisher- Set
Publisher/Subscribertiming contract, if violatedSubscriber/Publishercan close connection
- Set
ZeroCopyConnection- Remove
blocking_send - The builder shall be able to either create a connection or open a sender or receiver
- Remove
CommunicationChannel- Remove safe_overflow support
- ?add ability to create receiver in a different instance and open it later, excludes every socket variant?
- Rename
zero_copy::Serviceintoipc::Service, -> ??intra_process::Serviceforprocess_local?? - Consolidate name- and config-generation functions from
ipc/src/port/publisher.rsipc/src/service/mod.rs{dynamic|static}_config_storage_{name|config} {connection}\_{name|config} - Cargo.toml, add version inheritance from root workspace
- FreeBSD
- Advanced signal handling -
signal_call_and_fetch_with_registered_handler_works
- Advanced signal handling -
- Windows
- Back shm in windows with file
- POSIX thread wrapper uses currently heap when creating new thread with
pthread_create- Introduce global mempool allocated on program start for this operation
- Split up
UnixDatagramSocketinto one with ancillary data and one without- Add to builder if credentials shall always be sent
- Check if fd exchange with messages is supported
- Check if multiple fds can be exchanged with one message
- Check all POSIX wrapper that creation/open happens in the builder to avoid invalid states in objects
- Ensure non-movability via separate handle + remove is_initialized and
construct in builder
- Condition variable
- Remove IPC support for multi condition variable
- Condition variable
- Refactor error handling
- Error pyramid concept
- Extend and test
fail!macro
ZeroCopyConnection, add builder option to enable tracking of samples from sender to receiver and back- Add this to port factory publisher builder
- TEST
- Remove all unwrap and test them
- TEST
- Refactor
SampleMut,TypeStatePattern- only the initialized sample can be sent- Release underlying memory manually and sent/release it manually
- Subscriber strategies for multi-publisher
- priority?
- timestamp?
- random order?
- Refactor
global_config RelocatableContainertest which verifies that init does not write/modify more memory then it requires according tomemory_size()- Rename
CommunicationChannelintoNamedPipe - Subscriber internal cache which orders samples from multiple publishers
iceoryx2_ipcfinalize- Remove all
unwrap() global_config.rsuse correct string types- Introduce file_suffix_name.rs and use it there
- Remove all string usages and replace it with semantic_string impls
- Remove all
- Introduce
BasePort, contains alwaysportId:UniquePortIddynamic_config_guardfn new(service: &Service) -> Self
- Rename things
- With modules, every public thing should be named like the module, it will be
differentiate with the namespace * All
iceoryx2_cals
- With modules, every public thing should be named like the module, it will be
differentiate with the namespace * All
- What if
reference_counter == 0when creating new service ... wait for cleanup - Introduce
ShmIpctrait and derive macro to add#[repr(C)]to all shm transferable types- Introduce typed shared memory to avoid this problem
- Use it in comm channel
- Management in
communication_channel_shm_index_queue IndexQueueUnnamedSemaphore- All the other things in POSIX/etc
- Introduce typed shared memory to avoid this problem
- Use Rust singleton pattern for signal handler https://docs.rust-embedded.org/book/peripherals/singletons.html
- Goal: multiple concepts share the same resources
- ?introduce second name in NamedConcept, the group as FileName?
- Create dynamic shared memory abstraction (below concept layer)
- Must be able to dynamically resize (grow and shrink)
- Requires sophisticated allocator that can handle arbitrary sizes
- Must be emulate some kind of file system
- Idea is that the concept can use this construct to create and open specified instances via name
- Use dynamic shared memory
mpmc_container,mpmc_unique_index_set, try to avoid constantverify_memory_initializationcall
- Free list approach, what happens when publisher goes out of scope before subscriber does?
RelocatableContainer, make this trait somehow unmovable.ServiceStaticConfig, pack individual communication pattern configs intoMessagingPatternPerformanceandSafety Criticalmode- Default clock is in performance mode Realtime
- Revisit concept abstraction trait structure?
- Maybe:
concept_name.rs- Contains trait and all impls as pubs under same namespace
- Maybe:
DynamicStorage- Restrict
Tto https://doc.rust-lang.org/std/intrinsics/fn.needs_drop.html non dropable
- Restrict
- Make relative_ptr/OffsetRepository lock-free
- Introduce deadline timer
- Bitset enums like iceoryx2_bb_POSIX::Permission require const construction with bitset operations
- Make POSIX shared memory resizable with
mremap&ftruncate, see: https://stackoverflow.com/questions/40398901/resize-posix-shared-memory-a-working-example - Use
Kani,loomandmirifor lock-free code testing
FilePath/Pathcheck that every single entry is not longer thanFILENAME_LENGTH- Implement
StackBoxwhere the box max size is provided as generic user argument- Use it in allocator Memory cleanup function
- Introduce string
- Introduce vector
- Introduce list
- Introduce red-black-tree
- Introduce set
- Introduce hashmap
- Lock-free list
- Use unique index set as base
- Introduce
ThreadPool- Introduce
ActiveObject
- Introduce
- POSH/IPC/service
- Unique global service list file
- New service must add entry there, on remove, remove entry
- Unique global service list file
iceoryx2_configuse lock free singleton approach fromiceoryx2- Remove
ENAMETOOLONGand replace it with a path/filename string with maximum size- See
unlink,does_file_exist
- See
Semaphore- Implement
timedwaitwith GNU libcsem_clockwait
- Implement
ReadWriteMutex- Implement
timedwaitwith GNU libcpthread_rwlock_clockrdlock.pthread_rwlock_clockwrlock
- Implement
- Publisher delivers history only when calling send
- New subscriber may waits a long time when send is not called