24 | | * The kernel was passing kernel addresses of IPC phone objects (a.k.a. phone hashes) as connection identifiers to userspace. This intentional information leak was replaced by purely user-defined labels negotiated during IPC connection setup handshake. Each connected phone now has a user-defined label and imprints this label on each IPC call which is routed through it. |
25 | | * A couple of years ago, HelenOS got its own implementation of RCU (Read-Copy-Update) synchronization primitive along with a CHT (Concurrent Hash Table) data type based on RCU. Although sophisticated and interesting from the technological point of view, the RCU and CHT were mostly unused and unmaintained. We therefore decided to remove these very complex features. |
26 | | * The kernel waitq synchronization primitive was made available to userpace via capabilities. Consequently the userspace implementation of futexes was rewritten to use waitq's as the underlying synchronization mechanism. The custom support for futexes was removed from the kernel. |
| 24 | * The kernel used to pass kernel addresses of IPC phone objects (a.k.a. phone hashes) as connection identifiers to userspace. This intentional but unfortunate information leak was replaced in this release by purely user-defined labels negotiated during IPC connection setup handshake. Each connected phone now has a user-defined label and imprints this label on each IPC call which is routed through it. |
| 25 | * In 2014 HelenOS got its own implementation of RCU (Read-Copy-Update) synchronization primitive along with a CHT (Concurrent Hash Table) data type based on RCU. Although sophisticated and interesting from the technological point of view, the RCU and CHT were mostly unused and unmaintained. We therefore decided to remove these very complex features. |
| 26 | * The kernel waitq synchronization primitive was made available to userpace via capabilities. Consequently the userspace implementation of futexes was rewritten to use waitq's as the underlying synchronization mechanism. The custom support for futexes was removed from the kernel. One ramification of this change is that the underlying kernel object is no longer allocated lazily. This increases startup times of components that use futexes, but provides better failure modes, and better resource management possibilities in the future. |