mirror of
https://github.com/RGBCube/serenity
synced 2025-05-16 20:25:07 +00:00
Kernel+SystemMonitor: Publish can_read/write state for open files
The can_read() and can_write() states for file descriptions are now published in /proc, allowing SystemMonitor to display it.
This commit is contained in:
parent
660db0f79a
commit
06a80bcf69
3 changed files with 10 additions and 2 deletions
|
@ -25,6 +25,12 @@ ProcessFileDescriptorMapWidget::ProcessFileDescriptorMapWidget(GWidget* parent)
|
||||||
pid_fds_fields.empend("On exec", TextAlignment::CenterLeft, [](auto& object) {
|
pid_fds_fields.empend("On exec", TextAlignment::CenterLeft, [](auto& object) {
|
||||||
return object.get("cloexec").to_bool() ? "Close" : "Keep";
|
return object.get("cloexec").to_bool() ? "Close" : "Keep";
|
||||||
});
|
});
|
||||||
|
pid_fds_fields.empend("Can read", TextAlignment::CenterLeft, [](auto& object) {
|
||||||
|
return object.get("can_read").to_bool() ? "Yes" : "No";
|
||||||
|
});
|
||||||
|
pid_fds_fields.empend("Can write", TextAlignment::CenterLeft, [](auto& object) {
|
||||||
|
return object.get("can_write").to_bool() ? "Yes" : "No";
|
||||||
|
});
|
||||||
|
|
||||||
m_table_view->set_model(GJsonArrayModel::create({}, move(pid_fds_fields)));
|
m_table_view->set_model(GJsonArrayModel::create({}, move(pid_fds_fields)));
|
||||||
}
|
}
|
||||||
|
|
|
@ -226,6 +226,8 @@ Optional<KBuffer> procfs$pid_fds(InodeIdentifier identifier)
|
||||||
description_object.add("offset", description->offset());
|
description_object.add("offset", description->offset());
|
||||||
description_object.add("cloexec", cloexec);
|
description_object.add("cloexec", cloexec);
|
||||||
description_object.add("blocking", description->is_blocking());
|
description_object.add("blocking", description->is_blocking());
|
||||||
|
description_object.add("can_read", description->can_read());
|
||||||
|
description_object.add("can_write", description->can_write());
|
||||||
}
|
}
|
||||||
array.finish();
|
array.finish();
|
||||||
return builder.build();
|
return builder.build();
|
||||||
|
|
|
@ -195,7 +195,7 @@ bool LocalSocket::can_read(const FileDescription& description) const
|
||||||
return !has_attached_peer(description) || !m_for_server.is_empty();
|
return !has_attached_peer(description) || !m_for_server.is_empty();
|
||||||
if (role == Role::Connected)
|
if (role == Role::Connected)
|
||||||
return !has_attached_peer(description) || !m_for_client.is_empty();
|
return !has_attached_peer(description) || !m_for_client.is_empty();
|
||||||
ASSERT_NOT_REACHED();
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool LocalSocket::has_attached_peer(const FileDescription& description) const
|
bool LocalSocket::has_attached_peer(const FileDescription& description) const
|
||||||
|
@ -215,7 +215,7 @@ bool LocalSocket::can_write(const FileDescription& description) const
|
||||||
return !has_attached_peer(description) || m_for_client.bytes_in_write_buffer() < 16384;
|
return !has_attached_peer(description) || m_for_client.bytes_in_write_buffer() < 16384;
|
||||||
if (role == Role::Connected)
|
if (role == Role::Connected)
|
||||||
return !has_attached_peer(description) || m_for_server.bytes_in_write_buffer() < 16384;
|
return !has_attached_peer(description) || m_for_server.bytes_in_write_buffer() < 16384;
|
||||||
ASSERT_NOT_REACHED();
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
ssize_t LocalSocket::sendto(FileDescription& description, const void* data, size_t data_size, int, const sockaddr*, socklen_t)
|
ssize_t LocalSocket::sendto(FileDescription& description, const void* data, size_t data_size, int, const sockaddr*, socklen_t)
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue