mirror of
https://github.com/genodelabs/genode.git
synced 2025-02-01 16:58:29 +00:00
935bb36fe4
This patch fixes a corner case where a child is destructed while a asynchronous close request to a sibling server is still pending. The child immediately discarded the session ID as the end of the close-session processing, assuming that this ID is never to be needed again. The session-state continues to exist to handle asynchrous close protocol with the server. However, if the child is destructed at this point (before the server responded to the session request), the destruction of the child would not cover the discharging of the session state because the session state was no longer be part of the client's ID space. So once the asynchronous close response from the server came in, the session state contained stale information, in particular a stale closed_callback pointer. The patch fixes the problem by deferring the discarding of the client ID to the point where the session state is actually destructed. So the session of a pending close response is covered by the child destructor. Thanks to Pirmin Duss for reporting this issue along with a test scenario for reproducing it! Fixes #4039
This is generic part of the Genode implementation. It consists of two parts: :_Core_: is the ultimate root of the Genode application tree and provides abstractions for the lowest-level hardware resources such as RAM, ROM, CPU, and generic device access. All generic parts of Core can be found here - for system-specific implementations refer to the appropriate 'base-<system>' directory. :_Base libraries and protocols_: that are used by each Genode component to interact with other components. This is the glue that holds everything together. _Core_ may export information about the hardware platform by an ROM called 'platform_info'. Depending on the platform, e.g. ARM or x86 or riscv, and depending on the boot mode and boot loader and kernel, some nodes may not be populated. !<platform_info> ! <acpi revision="2" rsdt="0x1fe93074" xsdt="0x1fe930e8"/> ! <boot> ! <framebuffer phys="0x7300000" width="1024" height="768" bpp="32"/> ! </boot> !</platform_info> If the ACPI RSDT and XSDT physical pointer is reported by the used kernel and/or bootloader, _Core_ may provide this information by the ROM. If the graphic device is initialised and can be directly used by a framebuffer driver, _Core_ may provide the physical pointer to the framebuffer, the resolution and color depth in bits.