mirror of
https://github.com/genodelabs/genode.git
synced 2025-06-18 15:18:20 +00:00
vfs fs: ignore dead handle IDs on handle_ack
When a directory gets destructed it dissolves the handles of each contained file but the acknowledgement might be still in-flight. If we finally receive it, it leads to an Unknown_id exception on the Handles ID Space in 'handle_ack'. Now we catch it, print a warning, and go on.
This commit is contained in:
committed by
Norman Feske
parent
19868de69a
commit
0b5db07948
@ -244,26 +244,29 @@ class Vfs::Fs_file_system : public File_system
|
|||||||
|
|
||||||
Handle_space::Id const id(packet.handle());
|
Handle_space::Id const id(packet.handle());
|
||||||
|
|
||||||
_handle_space.apply<Fs_vfs_handle>(id, [&] (Fs_vfs_handle &handle)
|
try {
|
||||||
{
|
_handle_space.apply<Fs_vfs_handle>(id, [&] (Fs_vfs_handle &handle)
|
||||||
switch (packet.operation()) {
|
{
|
||||||
case Packet_descriptor::READ_READY:
|
switch (packet.operation()) {
|
||||||
handle.read_ready_state = Handle_state::Read_ready_state::READY;
|
case Packet_descriptor::READ_READY:
|
||||||
break;
|
handle.read_ready_state = Handle_state::Read_ready_state::READY;
|
||||||
|
break;
|
||||||
|
|
||||||
case Packet_descriptor::READ:
|
case Packet_descriptor::READ:
|
||||||
handle.queued_read_packet = packet;
|
handle.queued_read_packet = packet;
|
||||||
handle.queued_read_state = Handle_state::Queued_state::ACK;
|
handle.queued_read_state = Handle_state::Queued_state::ACK;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case Packet_descriptor::WRITE:
|
case Packet_descriptor::WRITE:
|
||||||
handle.queued_write_packet = packet;
|
handle.queued_write_packet = packet;
|
||||||
handle.queued_write_state = Handle_state::Queued_state::ACK;
|
handle.queued_write_state = Handle_state::Queued_state::ACK;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
_post_signal_hook.arm(handle.context);
|
_post_signal_hook.arm(handle.context);
|
||||||
});
|
});
|
||||||
|
} catch (Handle_space::Unknown_id) {
|
||||||
|
Genode::warning("ack for unknown VFS handle"); }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user