mirror of
https://github.com/LadybirdBrowser/ladybird.git
synced 2024-11-22 07:30:19 +00:00
Kernel+LibC: Rename shared buffer syscalls to use a prefix
This feels a lot more consistent and Unixy: create_shared_buffer() => shbuf_create() share_buffer_with() => shbuf_allow_pid() share_buffer_globally() => shbuf_allow_all() get_shared_buffer() => shbuf_get() release_shared_buffer() => shbuf_release() seal_shared_buffer() => shbuf_seal() get_shared_buffer_size() => shbuf_get_size() Also, "shared_buffer_id" is shortened to "shbuf_id" all around.
This commit is contained in:
parent
8460d02651
commit
f72e5bbb17
Notes:
sideshowbarker
2024-07-19 08:59:28 +09:00
Author: https://github.com/awesomekling Commit: https://github.com/SerenityOS/serenity/commit/f72e5bbb17c
36 changed files with 549 additions and 549 deletions
|
@ -37,19 +37,19 @@ namespace AK {
|
|||
RefPtr<SharedBuffer> SharedBuffer::create_with_size(int size)
|
||||
{
|
||||
void* data;
|
||||
int shared_buffer_id = create_shared_buffer(size, &data);
|
||||
if (shared_buffer_id < 0) {
|
||||
perror("create_shared_buffer");
|
||||
int shbuf_id = shbuf_create(size, &data);
|
||||
if (shbuf_id < 0) {
|
||||
perror("shbuf_create");
|
||||
return nullptr;
|
||||
}
|
||||
return adopt(*new SharedBuffer(shared_buffer_id, size, data));
|
||||
return adopt(*new SharedBuffer(shbuf_id, size, data));
|
||||
}
|
||||
|
||||
bool SharedBuffer::share_with(pid_t peer)
|
||||
{
|
||||
int ret = share_buffer_with(shared_buffer_id(), peer);
|
||||
int ret = shbuf_allow_pid(shbuf_id(), peer);
|
||||
if (ret < 0) {
|
||||
perror("share_buffer_with");
|
||||
perror("shbuf_allow_pid");
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
|
@ -57,31 +57,31 @@ bool SharedBuffer::share_with(pid_t peer)
|
|||
|
||||
bool SharedBuffer::share_globally()
|
||||
{
|
||||
int ret = share_buffer_globally(shared_buffer_id());
|
||||
int ret = shbuf_allow_all(shbuf_id());
|
||||
if (ret < 0) {
|
||||
perror("share_buffer_globally");
|
||||
perror("shbuf_allow_all");
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
RefPtr<SharedBuffer> SharedBuffer::create_from_shared_buffer_id(int shared_buffer_id)
|
||||
RefPtr<SharedBuffer> SharedBuffer::create_from_shbuf_id(int shbuf_id)
|
||||
{
|
||||
void* data = get_shared_buffer(shared_buffer_id);
|
||||
void* data = shbuf_get(shbuf_id);
|
||||
if (data == (void*)-1) {
|
||||
perror("get_shared_buffer");
|
||||
perror("shbuf_get");
|
||||
return nullptr;
|
||||
}
|
||||
int size = get_shared_buffer_size(shared_buffer_id);
|
||||
int size = shbuf_get_size(shbuf_id);
|
||||
if (size < 0) {
|
||||
perror("get_shared_buffer_size");
|
||||
perror("shbuf_get_size");
|
||||
return nullptr;
|
||||
}
|
||||
return adopt(*new SharedBuffer(shared_buffer_id, size, data));
|
||||
return adopt(*new SharedBuffer(shbuf_id, size, data));
|
||||
}
|
||||
|
||||
SharedBuffer::SharedBuffer(int shared_buffer_id, int size, void* data)
|
||||
: m_shared_buffer_id(shared_buffer_id)
|
||||
SharedBuffer::SharedBuffer(int shbuf_id, int size, void* data)
|
||||
: m_shbuf_id(shbuf_id)
|
||||
, m_size(size)
|
||||
, m_data(data)
|
||||
{
|
||||
|
@ -89,32 +89,32 @@ SharedBuffer::SharedBuffer(int shared_buffer_id, int size, void* data)
|
|||
|
||||
SharedBuffer::~SharedBuffer()
|
||||
{
|
||||
if (m_shared_buffer_id >= 0) {
|
||||
int rc = release_shared_buffer(m_shared_buffer_id);
|
||||
if (m_shbuf_id >= 0) {
|
||||
int rc = shbuf_release(m_shbuf_id);
|
||||
if (rc < 0) {
|
||||
perror("release_shared_buffer");
|
||||
perror("shbuf_release");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void SharedBuffer::seal()
|
||||
{
|
||||
int rc = seal_shared_buffer(m_shared_buffer_id);
|
||||
int rc = shbuf_seal(m_shbuf_id);
|
||||
if (rc < 0) {
|
||||
perror("seal_shared_buffer");
|
||||
perror("shbuf_seal");
|
||||
ASSERT_NOT_REACHED();
|
||||
}
|
||||
}
|
||||
|
||||
void SharedBuffer::set_volatile()
|
||||
{
|
||||
u32 rc = syscall(SC_set_shared_buffer_volatile, m_shared_buffer_id, true);
|
||||
u32 rc = syscall(SC_shbuf_set_volatile, m_shbuf_id, true);
|
||||
ASSERT(rc == 0);
|
||||
}
|
||||
|
||||
bool SharedBuffer::set_nonvolatile()
|
||||
{
|
||||
u32 rc = syscall(SC_set_shared_buffer_volatile, m_shared_buffer_id, false);
|
||||
u32 rc = syscall(SC_shbuf_set_volatile, m_shbuf_id, false);
|
||||
if (rc == 0)
|
||||
return true;
|
||||
if (rc == 1)
|
||||
|
|
|
@ -36,12 +36,12 @@ namespace AK {
|
|||
class SharedBuffer : public RefCounted<SharedBuffer> {
|
||||
public:
|
||||
static RefPtr<SharedBuffer> create_with_size(int);
|
||||
static RefPtr<SharedBuffer> create_from_shared_buffer_id(int);
|
||||
static RefPtr<SharedBuffer> create_from_shbuf_id(int);
|
||||
~SharedBuffer();
|
||||
|
||||
bool share_globally();
|
||||
bool share_with(pid_t);
|
||||
int shared_buffer_id() const { return m_shared_buffer_id; }
|
||||
int shbuf_id() const { return m_shbuf_id; }
|
||||
void seal();
|
||||
int size() const { return m_size; }
|
||||
void* data() { return m_data; }
|
||||
|
@ -50,9 +50,9 @@ public:
|
|||
[[nodiscard]] bool set_nonvolatile();
|
||||
|
||||
private:
|
||||
SharedBuffer(int shared_buffer_id, int size, void*);
|
||||
SharedBuffer(int shbuf_id, int size, void*);
|
||||
|
||||
int m_shared_buffer_id { -1 };
|
||||
int m_shbuf_id { -1 };
|
||||
int m_size { 0 };
|
||||
void* m_data;
|
||||
};
|
||||
|
|
|
@ -103,14 +103,14 @@ void PlaybackManager::remove_dead_buffers()
|
|||
int id = m_connection->get_playing_buffer();
|
||||
int current_id = -1;
|
||||
if (m_current_buffer)
|
||||
current_id = m_current_buffer->shared_buffer_id();
|
||||
current_id = m_current_buffer->shbuf_id();
|
||||
|
||||
if (id >= 0 && id != current_id) {
|
||||
while (!m_buffers.is_empty()) {
|
||||
--m_next_ptr;
|
||||
auto buffer = m_buffers.take_first();
|
||||
|
||||
if (buffer->shared_buffer_id() == id) {
|
||||
if (buffer->shbuf_id() == id) {
|
||||
m_current_buffer = buffer;
|
||||
break;
|
||||
}
|
||||
|
|
|
@ -267,7 +267,7 @@ GUI::Variant ProcessModel::data(const GUI::ModelIndex& index, Role role) const
|
|||
switch (index.column()) {
|
||||
case Column::Icon:
|
||||
if (thread.current_state.icon_id != -1) {
|
||||
auto icon_buffer = SharedBuffer::create_from_shared_buffer_id(thread.current_state.icon_id);
|
||||
auto icon_buffer = SharedBuffer::create_from_shbuf_id(thread.current_state.icon_id);
|
||||
if (icon_buffer) {
|
||||
auto icon_bitmap = Gfx::Bitmap::create_with_shared_buffer(Gfx::BitmapFormat::RGBA32, *icon_buffer, { 16, 16 });
|
||||
if (icon_bitmap)
|
||||
|
|
|
@ -177,7 +177,7 @@ void TaskbarWindow::wm_event(GUI::WMEvent& event)
|
|||
changed_event.icon_buffer_id());
|
||||
#endif
|
||||
if (auto* window = WindowList::the().window(identifier)) {
|
||||
auto buffer = SharedBuffer::create_from_shared_buffer_id(changed_event.icon_buffer_id());
|
||||
auto buffer = SharedBuffer::create_from_shbuf_id(changed_event.icon_buffer_id());
|
||||
ASSERT(buffer);
|
||||
window->button()->set_icon(Gfx::Bitmap::create_with_shared_buffer(Gfx::BitmapFormat::RGBA32, *buffer, changed_event.icon_size()));
|
||||
}
|
||||
|
|
|
@ -1,27 +0,0 @@
|
|||
## Name
|
||||
|
||||
create\_shared\_buffer - create a shareable memory buffer
|
||||
|
||||
## Synopsis
|
||||
```**c++
|
||||
#include <SharedBuffer.h>
|
||||
|
||||
int create_shared_buffer(int size, void** buffer);
|
||||
```
|
||||
|
||||
## Description
|
||||
|
||||
Creates a new memory region that can be shared with other processes. The region is only accessible to the creating process by default.
|
||||
|
||||
## Return value
|
||||
|
||||
If a region is successfully created, `create_shared_buffer()` stores a pointer to the memory in `buffer` and returns a buffer ID. Otherwise, it returns -1 and sets `errno` to describe the error.
|
||||
|
||||
## Errors
|
||||
|
||||
* `EINVAL`: `size` is zero or negative.
|
||||
* `EFAULT`: `buffer` is not a valid address.
|
||||
|
||||
## See also
|
||||
|
||||
* [`share_buffer_with`(2)](share_buffer_with.md)
|
|
@ -1,17 +1,17 @@
|
|||
## Name
|
||||
|
||||
share\_buffer\_with - allow another process to map a shareable buffer
|
||||
shbuf\_allow\_pid - allow another process to map a shareable buffer
|
||||
|
||||
## Synopsis
|
||||
```**c++
|
||||
#include <SharedBuffer.h>
|
||||
|
||||
int share_buffer_with(int shared_buffer_id, pid_t peer_pid);
|
||||
int shbuf_allow_pid(int shbuf_id, pid_t peer_pid);
|
||||
```
|
||||
|
||||
## Description
|
||||
|
||||
Gives the process with PID `peer_pid` permission to map the shareable buffer with ID `shared_buffer_id`.
|
||||
Gives the process with PID `peer_pid` permission to map the shareable buffer with ID `shbuf_id`.
|
||||
|
||||
## Return value
|
||||
|
||||
|
@ -19,10 +19,10 @@ On success, returns 0. Otherwise, returns -1 and `errno` is set.
|
|||
|
||||
## Errors
|
||||
|
||||
* `EINVAL`: `peer_pid` is invalid, or `shared_buffer_id` is not a valid ID.
|
||||
* `EPERM`: The calling process does not have access to the buffer with `shared_buffer_id`.
|
||||
* `EINVAL`: `peer_pid` is invalid, or `shbuf_id` is not a valid ID.
|
||||
* `EPERM`: The calling process does not have access to the buffer with `shbuf_id`.
|
||||
* `ESRCH`: No process with PID `peer_pid` is found.
|
||||
|
||||
## See also
|
||||
|
||||
* [`create_shared_buffer`(2)](create_shared_buffer.md)
|
||||
* [`shbuf_create`(2)](shbuf_create.md)
|
27
Base/usr/share/man/man2/shbuf_create.md
Normal file
27
Base/usr/share/man/man2/shbuf_create.md
Normal file
|
@ -0,0 +1,27 @@
|
|||
## Name
|
||||
|
||||
shbuf\_create - create a shareable memory buffer
|
||||
|
||||
## Synopsis
|
||||
```**c++
|
||||
#include <SharedBuffer.h>
|
||||
|
||||
int shbuf_create(int size, void** buffer);
|
||||
```
|
||||
|
||||
## Description
|
||||
|
||||
Creates a new memory region that can be shared with other processes. The region is only accessible to the calling process by default.
|
||||
|
||||
## Return value
|
||||
|
||||
If a region is successfully created, `shbuf_create()` stores a pointer to the memory in `buffer` and returns a buffer ID. Otherwise, it returns -1 and sets `errno` to describe the error.
|
||||
|
||||
## Errors
|
||||
|
||||
* `EINVAL`: `size` is zero or negative.
|
||||
* `EFAULT`: `buffer` is not a valid address.
|
||||
|
||||
## See also
|
||||
|
||||
* [`shbuf_allow_pid`(2)](shbuf_allow_pid.md)
|
|
@ -3555,7 +3555,7 @@ void Process::disown_all_shared_buffers()
|
|||
shared_buffer->disown(m_pid);
|
||||
}
|
||||
|
||||
int Process::sys$create_shared_buffer(int size, void** buffer)
|
||||
int Process::sys$shbuf_create(int size, void** buffer)
|
||||
{
|
||||
REQUIRE_PROMISE(shared_buffer);
|
||||
if (!size || size < 0)
|
||||
|
@ -3565,29 +3565,29 @@ int Process::sys$create_shared_buffer(int size, void** buffer)
|
|||
return -EFAULT;
|
||||
|
||||
LOCKER(shared_buffers().lock());
|
||||
static int s_next_shared_buffer_id;
|
||||
int shared_buffer_id = ++s_next_shared_buffer_id;
|
||||
auto shared_buffer = make<SharedBuffer>(shared_buffer_id, size);
|
||||
static int s_next_shbuf_id;
|
||||
int shbuf_id = ++s_next_shbuf_id;
|
||||
auto shared_buffer = make<SharedBuffer>(shbuf_id, size);
|
||||
shared_buffer->share_with(m_pid);
|
||||
|
||||
void* address = shared_buffer->ref_for_process_and_get_address(*this);
|
||||
copy_to_user(buffer, &address);
|
||||
ASSERT((int)shared_buffer->size() >= size);
|
||||
#ifdef SHARED_BUFFER_DEBUG
|
||||
kprintf("%s(%u): Created shared buffer %d @ %p (%u bytes, vmobject is %u)\n", name().characters(), pid(), shared_buffer_id, buffer, size, shared_buffer->size());
|
||||
kprintf("%s(%u): Created shared buffer %d @ %p (%u bytes, vmobject is %u)\n", name().characters(), pid(), shbuf_id, buffer, size, shared_buffer->size());
|
||||
#endif
|
||||
shared_buffers().resource().set(shared_buffer_id, move(shared_buffer));
|
||||
shared_buffers().resource().set(shbuf_id, move(shared_buffer));
|
||||
|
||||
return shared_buffer_id;
|
||||
return shbuf_id;
|
||||
}
|
||||
|
||||
int Process::sys$share_buffer_with(int shared_buffer_id, pid_t peer_pid)
|
||||
int Process::sys$shbuf_allow_pid(int shbuf_id, pid_t peer_pid)
|
||||
{
|
||||
REQUIRE_PROMISE(shared_buffer);
|
||||
if (!peer_pid || peer_pid < 0 || peer_pid == m_pid)
|
||||
return -EINVAL;
|
||||
LOCKER(shared_buffers().lock());
|
||||
auto it = shared_buffers().resource().find(shared_buffer_id);
|
||||
auto it = shared_buffers().resource().find(shbuf_id);
|
||||
if (it == shared_buffers().resource().end())
|
||||
return -EINVAL;
|
||||
auto& shared_buffer = *(*it).value;
|
||||
|
@ -3603,11 +3603,11 @@ int Process::sys$share_buffer_with(int shared_buffer_id, pid_t peer_pid)
|
|||
return 0;
|
||||
}
|
||||
|
||||
int Process::sys$share_buffer_globally(int shared_buffer_id)
|
||||
int Process::sys$shbuf_allow_all(int shbuf_id)
|
||||
{
|
||||
REQUIRE_PROMISE(shared_buffer);
|
||||
LOCKER(shared_buffers().lock());
|
||||
auto it = shared_buffers().resource().find(shared_buffer_id);
|
||||
auto it = shared_buffers().resource().find(shbuf_id);
|
||||
if (it == shared_buffers().resource().end())
|
||||
return -EINVAL;
|
||||
auto& shared_buffer = *(*it).value;
|
||||
|
@ -3617,84 +3617,84 @@ int Process::sys$share_buffer_globally(int shared_buffer_id)
|
|||
return 0;
|
||||
}
|
||||
|
||||
int Process::sys$release_shared_buffer(int shared_buffer_id)
|
||||
int Process::sys$shbuf_release(int shbuf_id)
|
||||
{
|
||||
REQUIRE_PROMISE(shared_buffer);
|
||||
LOCKER(shared_buffers().lock());
|
||||
auto it = shared_buffers().resource().find(shared_buffer_id);
|
||||
auto it = shared_buffers().resource().find(shbuf_id);
|
||||
if (it == shared_buffers().resource().end())
|
||||
return -EINVAL;
|
||||
auto& shared_buffer = *(*it).value;
|
||||
if (!shared_buffer.is_shared_with(m_pid))
|
||||
return -EPERM;
|
||||
#ifdef SHARED_BUFFER_DEBUG
|
||||
kprintf("%s(%u): Releasing shared buffer %d, buffer count: %u\n", name().characters(), pid(), shared_buffer_id, shared_buffers().resource().size());
|
||||
kprintf("%s(%u): Releasing shared buffer %d, buffer count: %u\n", name().characters(), pid(), shbuf_id, shared_buffers().resource().size());
|
||||
#endif
|
||||
shared_buffer.deref_for_process(*this);
|
||||
return 0;
|
||||
}
|
||||
|
||||
void* Process::sys$get_shared_buffer(int shared_buffer_id)
|
||||
void* Process::sys$shbuf_get(int shbuf_id)
|
||||
{
|
||||
REQUIRE_PROMISE(shared_buffer);
|
||||
LOCKER(shared_buffers().lock());
|
||||
auto it = shared_buffers().resource().find(shared_buffer_id);
|
||||
auto it = shared_buffers().resource().find(shbuf_id);
|
||||
if (it == shared_buffers().resource().end())
|
||||
return (void*)-EINVAL;
|
||||
auto& shared_buffer = *(*it).value;
|
||||
if (!shared_buffer.is_shared_with(m_pid))
|
||||
return (void*)-EPERM;
|
||||
#ifdef SHARED_BUFFER_DEBUG
|
||||
kprintf("%s(%u): Retaining shared buffer %d, buffer count: %u\n", name().characters(), pid(), shared_buffer_id, shared_buffers().resource().size());
|
||||
kprintf("%s(%u): Retaining shared buffer %d, buffer count: %u\n", name().characters(), pid(), shbuf_id, shared_buffers().resource().size());
|
||||
#endif
|
||||
return shared_buffer.ref_for_process_and_get_address(*this);
|
||||
}
|
||||
|
||||
int Process::sys$seal_shared_buffer(int shared_buffer_id)
|
||||
int Process::sys$shbuf_seal(int shbuf_id)
|
||||
{
|
||||
REQUIRE_PROMISE(shared_buffer);
|
||||
LOCKER(shared_buffers().lock());
|
||||
auto it = shared_buffers().resource().find(shared_buffer_id);
|
||||
auto it = shared_buffers().resource().find(shbuf_id);
|
||||
if (it == shared_buffers().resource().end())
|
||||
return -EINVAL;
|
||||
auto& shared_buffer = *(*it).value;
|
||||
if (!shared_buffer.is_shared_with(m_pid))
|
||||
return -EPERM;
|
||||
#ifdef SHARED_BUFFER_DEBUG
|
||||
kprintf("%s(%u): Sealing shared buffer %d\n", name().characters(), pid(), shared_buffer_id);
|
||||
kprintf("%s(%u): Sealing shared buffer %d\n", name().characters(), pid(), shbuf_id);
|
||||
#endif
|
||||
shared_buffer.seal();
|
||||
return 0;
|
||||
}
|
||||
|
||||
int Process::sys$get_shared_buffer_size(int shared_buffer_id)
|
||||
int Process::sys$shbuf_get_size(int shbuf_id)
|
||||
{
|
||||
REQUIRE_PROMISE(shared_buffer);
|
||||
LOCKER(shared_buffers().lock());
|
||||
auto it = shared_buffers().resource().find(shared_buffer_id);
|
||||
auto it = shared_buffers().resource().find(shbuf_id);
|
||||
if (it == shared_buffers().resource().end())
|
||||
return -EINVAL;
|
||||
auto& shared_buffer = *(*it).value;
|
||||
if (!shared_buffer.is_shared_with(m_pid))
|
||||
return -EPERM;
|
||||
#ifdef SHARED_BUFFER_DEBUG
|
||||
kprintf("%s(%u): Get shared buffer %d size: %u\n", name().characters(), pid(), shared_buffer_id, shared_buffers().resource().size());
|
||||
kprintf("%s(%u): Get shared buffer %d size: %u\n", name().characters(), pid(), shbuf_id, shared_buffers().resource().size());
|
||||
#endif
|
||||
return shared_buffer.size();
|
||||
}
|
||||
|
||||
int Process::sys$set_shared_buffer_volatile(int shared_buffer_id, bool state)
|
||||
int Process::sys$shbuf_set_volatile(int shbuf_id, bool state)
|
||||
{
|
||||
REQUIRE_PROMISE(shared_buffer);
|
||||
LOCKER(shared_buffers().lock());
|
||||
auto it = shared_buffers().resource().find(shared_buffer_id);
|
||||
auto it = shared_buffers().resource().find(shbuf_id);
|
||||
if (it == shared_buffers().resource().end())
|
||||
return -EINVAL;
|
||||
auto& shared_buffer = *(*it).value;
|
||||
if (!shared_buffer.is_shared_with(m_pid))
|
||||
return -EPERM;
|
||||
#ifdef SHARED_BUFFER_DEBUG
|
||||
kprintf("%s(%u): Set shared buffer %d volatile: %u\n", name().characters(), pid(), shared_buffer_id, state);
|
||||
kprintf("%s(%u): Set shared buffer %d volatile: %u\n", name().characters(), pid(), shbuf_id, state);
|
||||
#endif
|
||||
if (!state) {
|
||||
bool was_purged = shared_buffer.vmobject().was_purged();
|
||||
|
|
|
@ -273,14 +273,14 @@ public:
|
|||
int sys$rename(const Syscall::SC_rename_params*);
|
||||
int sys$systrace(pid_t);
|
||||
int sys$mknod(const Syscall::SC_mknod_params*);
|
||||
int sys$create_shared_buffer(int, void** buffer);
|
||||
int sys$share_buffer_with(int, pid_t peer_pid);
|
||||
int sys$share_buffer_globally(int);
|
||||
void* sys$get_shared_buffer(int shared_buffer_id);
|
||||
int sys$release_shared_buffer(int shared_buffer_id);
|
||||
int sys$seal_shared_buffer(int shared_buffer_id);
|
||||
int sys$get_shared_buffer_size(int shared_buffer_id);
|
||||
int sys$set_shared_buffer_volatile(int shared_buffer_id, bool);
|
||||
int sys$shbuf_create(int, void** buffer);
|
||||
int sys$shbuf_allow_pid(int, pid_t peer_pid);
|
||||
int sys$shbuf_allow_all(int);
|
||||
void* sys$shbuf_get(int shbuf_id);
|
||||
int sys$shbuf_release(int shbuf_id);
|
||||
int sys$shbuf_seal(int shbuf_id);
|
||||
int sys$shbuf_get_size(int shbuf_id);
|
||||
int sys$shbuf_set_volatile(int shbuf_id, bool);
|
||||
int sys$halt();
|
||||
int sys$reboot();
|
||||
int sys$set_process_icon(int icon_id);
|
||||
|
|
|
@ -46,7 +46,7 @@ void SharedBuffer::sanity_check(const char* what)
|
|||
found_refs += ref.count;
|
||||
|
||||
if (found_refs != m_total_refs) {
|
||||
dbg() << what << " sanity -- SharedBuffer{" << this << "} id: " << m_shared_buffer_id << " has total refs " << m_total_refs << " but we found " << found_refs;
|
||||
dbg() << what << " sanity -- SharedBuffer{" << this << "} id: " << m_shbuf_id << " has total refs " << m_total_refs << " but we found " << found_refs;
|
||||
for (const auto& ref : m_refs) {
|
||||
dbg() << " ref from pid " << ref.pid << ": refcnt " << ref.count;
|
||||
}
|
||||
|
@ -109,7 +109,7 @@ void SharedBuffer::share_with(pid_t peer_pid)
|
|||
return;
|
||||
for (auto& ref : m_refs) {
|
||||
if (ref.pid == peer_pid) {
|
||||
// don't increment the reference count yet; let them get_shared_buffer it first.
|
||||
// don't increment the reference count yet; let them shbuf_get it first.
|
||||
sanity_check("share_with (old ref)");
|
||||
return;
|
||||
}
|
||||
|
@ -129,12 +129,12 @@ void SharedBuffer::deref_for_process(Process& process)
|
|||
m_total_refs--;
|
||||
if (ref.count == 0) {
|
||||
#ifdef SHARED_BUFFER_DEBUG
|
||||
dbg() << "Releasing shared buffer reference on " << m_shared_buffer_id << " of size " << size() << " by PID " << process.pid();
|
||||
dbg() << "Releasing shared buffer reference on " << m_shbuf_id << " of size " << size() << " by PID " << process.pid();
|
||||
#endif
|
||||
process.deallocate_region(*ref.region);
|
||||
m_refs.unstable_remove(i);
|
||||
#ifdef SHARED_BUFFER_DEBUG
|
||||
dbg() << "Released shared buffer reference on " << m_shared_buffer_id << " of size " << size() << " by PID " << process.pid();
|
||||
dbg() << "Released shared buffer reference on " << m_shbuf_id << " of size " << size() << " by PID " << process.pid();
|
||||
#endif
|
||||
sanity_check("deref_for_process");
|
||||
destroy_if_unused();
|
||||
|
@ -154,12 +154,12 @@ void SharedBuffer::disown(pid_t pid)
|
|||
auto& ref = m_refs[i];
|
||||
if (ref.pid == pid) {
|
||||
#ifdef SHARED_BUFFER_DEBUG
|
||||
dbg() << "Disowning shared buffer " << m_shared_buffer_id << " of size " << size() << " by PID " << pid;
|
||||
dbg() << "Disowning shared buffer " << m_shbuf_id << " of size " << size() << " by PID " << pid;
|
||||
#endif
|
||||
m_total_refs -= ref.count;
|
||||
m_refs.unstable_remove(i);
|
||||
#ifdef SHARED_BUFFER_DEBUG
|
||||
dbg() << "Disowned shared buffer " << m_shared_buffer_id << " of size " << size() << " by PID " << pid;
|
||||
dbg() << "Disowned shared buffer " << m_shbuf_id << " of size " << size() << " by PID " << pid;
|
||||
#endif
|
||||
destroy_if_unused();
|
||||
return;
|
||||
|
@ -173,10 +173,10 @@ void SharedBuffer::destroy_if_unused()
|
|||
sanity_check("destroy_if_unused");
|
||||
if (m_total_refs == 0) {
|
||||
#ifdef SHARED_BUFFER_DEBUG
|
||||
kprintf("Destroying unused SharedBuffer{%p} id: %d\n", this, m_shared_buffer_id);
|
||||
kprintf("Destroying unused SharedBuffer{%p} id: %d\n", this, m_shbuf_id);
|
||||
#endif
|
||||
auto count_before = shared_buffers().resource().size();
|
||||
shared_buffers().resource().remove(m_shared_buffer_id);
|
||||
shared_buffers().resource().remove(m_shbuf_id);
|
||||
ASSERT(count_before != shared_buffers().resource().size());
|
||||
}
|
||||
}
|
||||
|
|
|
@ -48,18 +48,18 @@ private:
|
|||
|
||||
public:
|
||||
SharedBuffer(int id, int size)
|
||||
: m_shared_buffer_id(id)
|
||||
: m_shbuf_id(id)
|
||||
, m_vmobject(PurgeableVMObject::create_with_size(size))
|
||||
{
|
||||
#ifdef SHARED_BUFFER_DEBUG
|
||||
dbg() << "Created shared buffer " << m_shared_buffer_id << " of size " << size;
|
||||
dbg() << "Created shared buffer " << m_shbuf_id << " of size " << size;
|
||||
#endif
|
||||
}
|
||||
|
||||
~SharedBuffer()
|
||||
{
|
||||
#ifdef SHARED_BUFFER_DEBUG
|
||||
dbg() << "Destroyed shared buffer " << m_shared_buffer_id << " of size " << size();
|
||||
dbg() << "Destroyed shared buffer " << m_shbuf_id << " of size " << size();
|
||||
#endif
|
||||
}
|
||||
|
||||
|
@ -75,9 +75,9 @@ public:
|
|||
void seal();
|
||||
PurgeableVMObject& vmobject() { return m_vmobject; }
|
||||
const PurgeableVMObject& vmobject() const { return m_vmobject; }
|
||||
int id() const { return m_shared_buffer_id; }
|
||||
int id() const { return m_shbuf_id; }
|
||||
|
||||
int m_shared_buffer_id { -1 };
|
||||
int m_shbuf_id { -1 };
|
||||
bool m_writable { true };
|
||||
bool m_global { false };
|
||||
NonnullRefPtr<PurgeableVMObject> m_vmobject;
|
||||
|
|
730
Kernel/Syscall.h
730
Kernel/Syscall.h
|
@ -42,161 +42,161 @@ typedef u32 socklen_t;
|
|||
|
||||
namespace Kernel {
|
||||
|
||||
#define ENUMERATE_SYSCALLS \
|
||||
__ENUMERATE_SYSCALL(sleep) \
|
||||
__ENUMERATE_SYSCALL(yield) \
|
||||
__ENUMERATE_SYSCALL(open) \
|
||||
__ENUMERATE_SYSCALL(close) \
|
||||
__ENUMERATE_SYSCALL(read) \
|
||||
__ENUMERATE_SYSCALL(lseek) \
|
||||
__ENUMERATE_SYSCALL(kill) \
|
||||
__ENUMERATE_SYSCALL(getuid) \
|
||||
__ENUMERATE_SYSCALL(exit) \
|
||||
__ENUMERATE_SYSCALL(getgid) \
|
||||
__ENUMERATE_SYSCALL(getpid) \
|
||||
__ENUMERATE_SYSCALL(waitid) \
|
||||
__ENUMERATE_SYSCALL(mmap) \
|
||||
__ENUMERATE_SYSCALL(munmap) \
|
||||
__ENUMERATE_SYSCALL(get_dir_entries) \
|
||||
__ENUMERATE_SYSCALL(getcwd) \
|
||||
__ENUMERATE_SYSCALL(gettimeofday) \
|
||||
__ENUMERATE_SYSCALL(gethostname) \
|
||||
__ENUMERATE_SYSCALL(chdir) \
|
||||
__ENUMERATE_SYSCALL(uname) \
|
||||
__ENUMERATE_SYSCALL(set_mmap_name) \
|
||||
__ENUMERATE_SYSCALL(readlink) \
|
||||
__ENUMERATE_SYSCALL(write) \
|
||||
__ENUMERATE_SYSCALL(ttyname_r) \
|
||||
__ENUMERATE_SYSCALL(stat) \
|
||||
__ENUMERATE_SYSCALL(getsid) \
|
||||
__ENUMERATE_SYSCALL(setsid) \
|
||||
__ENUMERATE_SYSCALL(getpgid) \
|
||||
__ENUMERATE_SYSCALL(setpgid) \
|
||||
__ENUMERATE_SYSCALL(getpgrp) \
|
||||
__ENUMERATE_SYSCALL(fork) \
|
||||
__ENUMERATE_SYSCALL(execve) \
|
||||
__ENUMERATE_SYSCALL(geteuid) \
|
||||
__ENUMERATE_SYSCALL(getegid) \
|
||||
__ENUMERATE_SYSCALL(getdtablesize) \
|
||||
__ENUMERATE_SYSCALL(dup) \
|
||||
__ENUMERATE_SYSCALL(dup2) \
|
||||
__ENUMERATE_SYSCALL(sigaction) \
|
||||
__ENUMERATE_SYSCALL(getppid) \
|
||||
__ENUMERATE_SYSCALL(umask) \
|
||||
__ENUMERATE_SYSCALL(getgroups) \
|
||||
__ENUMERATE_SYSCALL(setgroups) \
|
||||
__ENUMERATE_SYSCALL(sigreturn) \
|
||||
__ENUMERATE_SYSCALL(sigprocmask) \
|
||||
__ENUMERATE_SYSCALL(sigpending) \
|
||||
__ENUMERATE_SYSCALL(pipe) \
|
||||
__ENUMERATE_SYSCALL(killpg) \
|
||||
__ENUMERATE_SYSCALL(setuid) \
|
||||
__ENUMERATE_SYSCALL(setgid) \
|
||||
__ENUMERATE_SYSCALL(alarm) \
|
||||
__ENUMERATE_SYSCALL(fstat) \
|
||||
__ENUMERATE_SYSCALL(access) \
|
||||
__ENUMERATE_SYSCALL(fcntl) \
|
||||
__ENUMERATE_SYSCALL(ioctl) \
|
||||
__ENUMERATE_SYSCALL(mkdir) \
|
||||
__ENUMERATE_SYSCALL(times) \
|
||||
__ENUMERATE_SYSCALL(utime) \
|
||||
__ENUMERATE_SYSCALL(sync) \
|
||||
__ENUMERATE_SYSCALL(ptsname_r) \
|
||||
__ENUMERATE_SYSCALL(select) \
|
||||
__ENUMERATE_SYSCALL(unlink) \
|
||||
__ENUMERATE_SYSCALL(poll) \
|
||||
__ENUMERATE_SYSCALL(rmdir) \
|
||||
__ENUMERATE_SYSCALL(chmod) \
|
||||
__ENUMERATE_SYSCALL(usleep) \
|
||||
__ENUMERATE_SYSCALL(socket) \
|
||||
__ENUMERATE_SYSCALL(bind) \
|
||||
__ENUMERATE_SYSCALL(accept) \
|
||||
__ENUMERATE_SYSCALL(listen) \
|
||||
__ENUMERATE_SYSCALL(connect) \
|
||||
__ENUMERATE_SYSCALL(create_shared_buffer) \
|
||||
__ENUMERATE_SYSCALL(share_buffer_with) \
|
||||
__ENUMERATE_SYSCALL(get_shared_buffer) \
|
||||
__ENUMERATE_SYSCALL(release_shared_buffer) \
|
||||
__ENUMERATE_SYSCALL(link) \
|
||||
__ENUMERATE_SYSCALL(chown) \
|
||||
__ENUMERATE_SYSCALL(fchmod) \
|
||||
__ENUMERATE_SYSCALL(symlink) \
|
||||
__ENUMERATE_SYSCALL(get_shared_buffer_size) \
|
||||
__ENUMERATE_SYSCALL(seal_shared_buffer) \
|
||||
__ENUMERATE_SYSCALL(sendto) \
|
||||
__ENUMERATE_SYSCALL(recvfrom) \
|
||||
__ENUMERATE_SYSCALL(getsockopt) \
|
||||
__ENUMERATE_SYSCALL(setsockopt) \
|
||||
__ENUMERATE_SYSCALL(create_thread) \
|
||||
__ENUMERATE_SYSCALL(gettid) \
|
||||
__ENUMERATE_SYSCALL(donate) \
|
||||
__ENUMERATE_SYSCALL(rename) \
|
||||
__ENUMERATE_SYSCALL(ftruncate) \
|
||||
__ENUMERATE_SYSCALL(systrace) \
|
||||
__ENUMERATE_SYSCALL(exit_thread) \
|
||||
__ENUMERATE_SYSCALL(mknod) \
|
||||
__ENUMERATE_SYSCALL(writev) \
|
||||
__ENUMERATE_SYSCALL(beep) \
|
||||
__ENUMERATE_SYSCALL(getsockname) \
|
||||
__ENUMERATE_SYSCALL(getpeername) \
|
||||
__ENUMERATE_SYSCALL(sched_setparam) \
|
||||
__ENUMERATE_SYSCALL(sched_getparam) \
|
||||
__ENUMERATE_SYSCALL(fchown) \
|
||||
__ENUMERATE_SYSCALL(halt) \
|
||||
__ENUMERATE_SYSCALL(reboot) \
|
||||
__ENUMERATE_SYSCALL(mount) \
|
||||
__ENUMERATE_SYSCALL(umount) \
|
||||
__ENUMERATE_SYSCALL(dump_backtrace) \
|
||||
__ENUMERATE_SYSCALL(dbgputch) \
|
||||
__ENUMERATE_SYSCALL(dbgputstr) \
|
||||
__ENUMERATE_SYSCALL(watch_file) \
|
||||
__ENUMERATE_SYSCALL(share_buffer_globally) \
|
||||
__ENUMERATE_SYSCALL(set_process_icon) \
|
||||
__ENUMERATE_SYSCALL(mprotect) \
|
||||
__ENUMERATE_SYSCALL(realpath) \
|
||||
__ENUMERATE_SYSCALL(get_process_name) \
|
||||
__ENUMERATE_SYSCALL(fchdir) \
|
||||
__ENUMERATE_SYSCALL(getrandom) \
|
||||
__ENUMERATE_SYSCALL(setkeymap) \
|
||||
__ENUMERATE_SYSCALL(clock_gettime) \
|
||||
__ENUMERATE_SYSCALL(clock_nanosleep) \
|
||||
__ENUMERATE_SYSCALL(join_thread) \
|
||||
__ENUMERATE_SYSCALL(module_load) \
|
||||
__ENUMERATE_SYSCALL(module_unload) \
|
||||
__ENUMERATE_SYSCALL(detach_thread) \
|
||||
__ENUMERATE_SYSCALL(set_thread_name) \
|
||||
__ENUMERATE_SYSCALL(get_thread_name) \
|
||||
__ENUMERATE_SYSCALL(madvise) \
|
||||
__ENUMERATE_SYSCALL(purge) \
|
||||
__ENUMERATE_SYSCALL(set_shared_buffer_volatile) \
|
||||
__ENUMERATE_SYSCALL(profiling_enable) \
|
||||
__ENUMERATE_SYSCALL(profiling_disable) \
|
||||
__ENUMERATE_SYSCALL(get_kernel_info_page) \
|
||||
__ENUMERATE_SYSCALL(futex) \
|
||||
__ENUMERATE_SYSCALL(set_thread_boost) \
|
||||
__ENUMERATE_SYSCALL(set_process_boost) \
|
||||
__ENUMERATE_SYSCALL(chroot) \
|
||||
__ENUMERATE_SYSCALL(pledge) \
|
||||
__ENUMERATE_SYSCALL(unveil) \
|
||||
__ENUMERATE_SYSCALL(perf_event) \
|
||||
#define ENUMERATE_SYSCALLS \
|
||||
__ENUMERATE_SYSCALL(sleep) \
|
||||
__ENUMERATE_SYSCALL(yield) \
|
||||
__ENUMERATE_SYSCALL(open) \
|
||||
__ENUMERATE_SYSCALL(close) \
|
||||
__ENUMERATE_SYSCALL(read) \
|
||||
__ENUMERATE_SYSCALL(lseek) \
|
||||
__ENUMERATE_SYSCALL(kill) \
|
||||
__ENUMERATE_SYSCALL(getuid) \
|
||||
__ENUMERATE_SYSCALL(exit) \
|
||||
__ENUMERATE_SYSCALL(getgid) \
|
||||
__ENUMERATE_SYSCALL(getpid) \
|
||||
__ENUMERATE_SYSCALL(waitid) \
|
||||
__ENUMERATE_SYSCALL(mmap) \
|
||||
__ENUMERATE_SYSCALL(munmap) \
|
||||
__ENUMERATE_SYSCALL(get_dir_entries) \
|
||||
__ENUMERATE_SYSCALL(getcwd) \
|
||||
__ENUMERATE_SYSCALL(gettimeofday) \
|
||||
__ENUMERATE_SYSCALL(gethostname) \
|
||||
__ENUMERATE_SYSCALL(chdir) \
|
||||
__ENUMERATE_SYSCALL(uname) \
|
||||
__ENUMERATE_SYSCALL(set_mmap_name) \
|
||||
__ENUMERATE_SYSCALL(readlink) \
|
||||
__ENUMERATE_SYSCALL(write) \
|
||||
__ENUMERATE_SYSCALL(ttyname_r) \
|
||||
__ENUMERATE_SYSCALL(stat) \
|
||||
__ENUMERATE_SYSCALL(getsid) \
|
||||
__ENUMERATE_SYSCALL(setsid) \
|
||||
__ENUMERATE_SYSCALL(getpgid) \
|
||||
__ENUMERATE_SYSCALL(setpgid) \
|
||||
__ENUMERATE_SYSCALL(getpgrp) \
|
||||
__ENUMERATE_SYSCALL(fork) \
|
||||
__ENUMERATE_SYSCALL(execve) \
|
||||
__ENUMERATE_SYSCALL(geteuid) \
|
||||
__ENUMERATE_SYSCALL(getegid) \
|
||||
__ENUMERATE_SYSCALL(getdtablesize) \
|
||||
__ENUMERATE_SYSCALL(dup) \
|
||||
__ENUMERATE_SYSCALL(dup2) \
|
||||
__ENUMERATE_SYSCALL(sigaction) \
|
||||
__ENUMERATE_SYSCALL(getppid) \
|
||||
__ENUMERATE_SYSCALL(umask) \
|
||||
__ENUMERATE_SYSCALL(getgroups) \
|
||||
__ENUMERATE_SYSCALL(setgroups) \
|
||||
__ENUMERATE_SYSCALL(sigreturn) \
|
||||
__ENUMERATE_SYSCALL(sigprocmask) \
|
||||
__ENUMERATE_SYSCALL(sigpending) \
|
||||
__ENUMERATE_SYSCALL(pipe) \
|
||||
__ENUMERATE_SYSCALL(killpg) \
|
||||
__ENUMERATE_SYSCALL(setuid) \
|
||||
__ENUMERATE_SYSCALL(setgid) \
|
||||
__ENUMERATE_SYSCALL(alarm) \
|
||||
__ENUMERATE_SYSCALL(fstat) \
|
||||
__ENUMERATE_SYSCALL(access) \
|
||||
__ENUMERATE_SYSCALL(fcntl) \
|
||||
__ENUMERATE_SYSCALL(ioctl) \
|
||||
__ENUMERATE_SYSCALL(mkdir) \
|
||||
__ENUMERATE_SYSCALL(times) \
|
||||
__ENUMERATE_SYSCALL(utime) \
|
||||
__ENUMERATE_SYSCALL(sync) \
|
||||
__ENUMERATE_SYSCALL(ptsname_r) \
|
||||
__ENUMERATE_SYSCALL(select) \
|
||||
__ENUMERATE_SYSCALL(unlink) \
|
||||
__ENUMERATE_SYSCALL(poll) \
|
||||
__ENUMERATE_SYSCALL(rmdir) \
|
||||
__ENUMERATE_SYSCALL(chmod) \
|
||||
__ENUMERATE_SYSCALL(usleep) \
|
||||
__ENUMERATE_SYSCALL(socket) \
|
||||
__ENUMERATE_SYSCALL(bind) \
|
||||
__ENUMERATE_SYSCALL(accept) \
|
||||
__ENUMERATE_SYSCALL(listen) \
|
||||
__ENUMERATE_SYSCALL(connect) \
|
||||
__ENUMERATE_SYSCALL(shbuf_create) \
|
||||
__ENUMERATE_SYSCALL(shbuf_allow_pid) \
|
||||
__ENUMERATE_SYSCALL(shbuf_get) \
|
||||
__ENUMERATE_SYSCALL(shbuf_release) \
|
||||
__ENUMERATE_SYSCALL(link) \
|
||||
__ENUMERATE_SYSCALL(chown) \
|
||||
__ENUMERATE_SYSCALL(fchmod) \
|
||||
__ENUMERATE_SYSCALL(symlink) \
|
||||
__ENUMERATE_SYSCALL(shbuf_get_size) \
|
||||
__ENUMERATE_SYSCALL(shbuf_seal) \
|
||||
__ENUMERATE_SYSCALL(sendto) \
|
||||
__ENUMERATE_SYSCALL(recvfrom) \
|
||||
__ENUMERATE_SYSCALL(getsockopt) \
|
||||
__ENUMERATE_SYSCALL(setsockopt) \
|
||||
__ENUMERATE_SYSCALL(create_thread) \
|
||||
__ENUMERATE_SYSCALL(gettid) \
|
||||
__ENUMERATE_SYSCALL(donate) \
|
||||
__ENUMERATE_SYSCALL(rename) \
|
||||
__ENUMERATE_SYSCALL(ftruncate) \
|
||||
__ENUMERATE_SYSCALL(systrace) \
|
||||
__ENUMERATE_SYSCALL(exit_thread) \
|
||||
__ENUMERATE_SYSCALL(mknod) \
|
||||
__ENUMERATE_SYSCALL(writev) \
|
||||
__ENUMERATE_SYSCALL(beep) \
|
||||
__ENUMERATE_SYSCALL(getsockname) \
|
||||
__ENUMERATE_SYSCALL(getpeername) \
|
||||
__ENUMERATE_SYSCALL(sched_setparam) \
|
||||
__ENUMERATE_SYSCALL(sched_getparam) \
|
||||
__ENUMERATE_SYSCALL(fchown) \
|
||||
__ENUMERATE_SYSCALL(halt) \
|
||||
__ENUMERATE_SYSCALL(reboot) \
|
||||
__ENUMERATE_SYSCALL(mount) \
|
||||
__ENUMERATE_SYSCALL(umount) \
|
||||
__ENUMERATE_SYSCALL(dump_backtrace) \
|
||||
__ENUMERATE_SYSCALL(dbgputch) \
|
||||
__ENUMERATE_SYSCALL(dbgputstr) \
|
||||
__ENUMERATE_SYSCALL(watch_file) \
|
||||
__ENUMERATE_SYSCALL(shbuf_allow_all) \
|
||||
__ENUMERATE_SYSCALL(set_process_icon) \
|
||||
__ENUMERATE_SYSCALL(mprotect) \
|
||||
__ENUMERATE_SYSCALL(realpath) \
|
||||
__ENUMERATE_SYSCALL(get_process_name) \
|
||||
__ENUMERATE_SYSCALL(fchdir) \
|
||||
__ENUMERATE_SYSCALL(getrandom) \
|
||||
__ENUMERATE_SYSCALL(setkeymap) \
|
||||
__ENUMERATE_SYSCALL(clock_gettime) \
|
||||
__ENUMERATE_SYSCALL(clock_nanosleep) \
|
||||
__ENUMERATE_SYSCALL(join_thread) \
|
||||
__ENUMERATE_SYSCALL(module_load) \
|
||||
__ENUMERATE_SYSCALL(module_unload) \
|
||||
__ENUMERATE_SYSCALL(detach_thread) \
|
||||
__ENUMERATE_SYSCALL(set_thread_name) \
|
||||
__ENUMERATE_SYSCALL(get_thread_name) \
|
||||
__ENUMERATE_SYSCALL(madvise) \
|
||||
__ENUMERATE_SYSCALL(purge) \
|
||||
__ENUMERATE_SYSCALL(shbuf_set_volatile) \
|
||||
__ENUMERATE_SYSCALL(profiling_enable) \
|
||||
__ENUMERATE_SYSCALL(profiling_disable) \
|
||||
__ENUMERATE_SYSCALL(get_kernel_info_page) \
|
||||
__ENUMERATE_SYSCALL(futex) \
|
||||
__ENUMERATE_SYSCALL(set_thread_boost) \
|
||||
__ENUMERATE_SYSCALL(set_process_boost) \
|
||||
__ENUMERATE_SYSCALL(chroot) \
|
||||
__ENUMERATE_SYSCALL(pledge) \
|
||||
__ENUMERATE_SYSCALL(unveil) \
|
||||
__ENUMERATE_SYSCALL(perf_event) \
|
||||
__ENUMERATE_SYSCALL(shutdown)
|
||||
|
||||
namespace Syscall {
|
||||
|
||||
enum Function {
|
||||
enum Function {
|
||||
#undef __ENUMERATE_SYSCALL
|
||||
#undef __ENUMERATE_REMOVED_SYSCALL
|
||||
#define __ENUMERATE_REMOVED_SYSCALL(x) SC_##x,
|
||||
#define __ENUMERATE_SYSCALL(x) SC_##x,
|
||||
ENUMERATE_SYSCALLS
|
||||
ENUMERATE_SYSCALLS
|
||||
#undef __ENUMERATE_SYSCALL
|
||||
#undef __ENUMERATE_REMOVED_SYSCALL
|
||||
__Count
|
||||
};
|
||||
__Count
|
||||
};
|
||||
|
||||
inline constexpr const char* to_string(Function function)
|
||||
{
|
||||
switch (function) {
|
||||
inline constexpr const char* to_string(Function function)
|
||||
{
|
||||
switch (function) {
|
||||
#undef __ENUMERATE_SYSCALL
|
||||
#undef __ENUMERATE_REMOVED_SYSCALL
|
||||
#define __ENUMERATE_REMOVED_SYSCALL(x) \
|
||||
|
@ -205,267 +205,267 @@ inline constexpr const char* to_string(Function function)
|
|||
#define __ENUMERATE_SYSCALL(x) \
|
||||
case SC_##x: \
|
||||
return #x;
|
||||
ENUMERATE_SYSCALLS
|
||||
ENUMERATE_SYSCALLS
|
||||
#undef __ENUMERATE_SYSCALL
|
||||
#undef __ENUMERATE_REMOVED_SYSCALL
|
||||
default:
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
return "Unknown";
|
||||
}
|
||||
return "Unknown";
|
||||
}
|
||||
|
||||
#ifdef __serenity__
|
||||
struct StringArgument {
|
||||
const char* characters { nullptr };
|
||||
size_t length { 0 };
|
||||
};
|
||||
struct StringArgument {
|
||||
const char* characters { nullptr };
|
||||
size_t length { 0 };
|
||||
};
|
||||
|
||||
template<typename DataType, typename SizeType>
|
||||
struct MutableBufferArgument {
|
||||
DataType* data { nullptr };
|
||||
SizeType size { 0 };
|
||||
};
|
||||
template<typename DataType, typename SizeType>
|
||||
struct MutableBufferArgument {
|
||||
DataType* data { nullptr };
|
||||
SizeType size { 0 };
|
||||
};
|
||||
|
||||
template<typename DataType, typename SizeType>
|
||||
struct ImmutableBufferArgument {
|
||||
const DataType* data { nullptr };
|
||||
SizeType size { 0 };
|
||||
};
|
||||
template<typename DataType, typename SizeType>
|
||||
struct ImmutableBufferArgument {
|
||||
const DataType* data { nullptr };
|
||||
SizeType size { 0 };
|
||||
};
|
||||
|
||||
struct StringListArgument {
|
||||
StringArgument* strings { nullptr };
|
||||
size_t length { 0 };
|
||||
};
|
||||
struct StringListArgument {
|
||||
StringArgument* strings { nullptr };
|
||||
size_t length { 0 };
|
||||
};
|
||||
|
||||
struct SC_mmap_params {
|
||||
uint32_t addr;
|
||||
uint32_t size;
|
||||
uint32_t alignment;
|
||||
int32_t prot;
|
||||
int32_t flags;
|
||||
int32_t fd;
|
||||
int32_t offset; // FIXME: 64-bit off_t?
|
||||
StringArgument name;
|
||||
};
|
||||
struct SC_mmap_params {
|
||||
uint32_t addr;
|
||||
uint32_t size;
|
||||
uint32_t alignment;
|
||||
int32_t prot;
|
||||
int32_t flags;
|
||||
int32_t fd;
|
||||
int32_t offset; // FIXME: 64-bit off_t?
|
||||
StringArgument name;
|
||||
};
|
||||
|
||||
struct SC_open_params {
|
||||
int dirfd;
|
||||
StringArgument path;
|
||||
int options;
|
||||
u16 mode;
|
||||
};
|
||||
struct SC_open_params {
|
||||
int dirfd;
|
||||
StringArgument path;
|
||||
int options;
|
||||
u16 mode;
|
||||
};
|
||||
|
||||
struct SC_select_params {
|
||||
int nfds;
|
||||
fd_set* readfds;
|
||||
fd_set* writefds;
|
||||
fd_set* exceptfds;
|
||||
struct timeval* timeout;
|
||||
};
|
||||
struct SC_select_params {
|
||||
int nfds;
|
||||
fd_set* readfds;
|
||||
fd_set* writefds;
|
||||
fd_set* exceptfds;
|
||||
struct timeval* timeout;
|
||||
};
|
||||
|
||||
struct SC_clock_nanosleep_params {
|
||||
int clock_id;
|
||||
int flags;
|
||||
const struct timespec* requested_sleep;
|
||||
struct timespec* remaining_sleep;
|
||||
};
|
||||
struct SC_clock_nanosleep_params {
|
||||
int clock_id;
|
||||
int flags;
|
||||
const struct timespec* requested_sleep;
|
||||
struct timespec* remaining_sleep;
|
||||
};
|
||||
|
||||
struct SC_sendto_params {
|
||||
int sockfd;
|
||||
ImmutableBufferArgument<void, size_t> data;
|
||||
int flags;
|
||||
const sockaddr* addr;
|
||||
socklen_t addr_length;
|
||||
};
|
||||
struct SC_sendto_params {
|
||||
int sockfd;
|
||||
ImmutableBufferArgument<void, size_t> data;
|
||||
int flags;
|
||||
const sockaddr* addr;
|
||||
socklen_t addr_length;
|
||||
};
|
||||
|
||||
struct SC_recvfrom_params {
|
||||
int sockfd;
|
||||
MutableBufferArgument<void, size_t> buffer;
|
||||
int flags;
|
||||
sockaddr* addr;
|
||||
socklen_t* addr_length;
|
||||
};
|
||||
struct SC_recvfrom_params {
|
||||
int sockfd;
|
||||
MutableBufferArgument<void, size_t> buffer;
|
||||
int flags;
|
||||
sockaddr* addr;
|
||||
socklen_t* addr_length;
|
||||
};
|
||||
|
||||
struct SC_getsockopt_params {
|
||||
int sockfd;
|
||||
int level;
|
||||
int option;
|
||||
void* value;
|
||||
socklen_t* value_size;
|
||||
};
|
||||
struct SC_getsockopt_params {
|
||||
int sockfd;
|
||||
int level;
|
||||
int option;
|
||||
void* value;
|
||||
socklen_t* value_size;
|
||||
};
|
||||
|
||||
struct SC_setsockopt_params {
|
||||
int sockfd;
|
||||
int level;
|
||||
int option;
|
||||
const void* value;
|
||||
socklen_t value_size;
|
||||
};
|
||||
struct SC_setsockopt_params {
|
||||
int sockfd;
|
||||
int level;
|
||||
int option;
|
||||
const void* value;
|
||||
socklen_t value_size;
|
||||
};
|
||||
|
||||
struct SC_getsockname_params {
|
||||
int sockfd;
|
||||
sockaddr* addr;
|
||||
socklen_t* addrlen;
|
||||
};
|
||||
struct SC_getsockname_params {
|
||||
int sockfd;
|
||||
sockaddr* addr;
|
||||
socklen_t* addrlen;
|
||||
};
|
||||
|
||||
struct SC_getpeername_params {
|
||||
int sockfd;
|
||||
sockaddr* addr;
|
||||
socklen_t* addrlen;
|
||||
};
|
||||
struct SC_getpeername_params {
|
||||
int sockfd;
|
||||
sockaddr* addr;
|
||||
socklen_t* addrlen;
|
||||
};
|
||||
|
||||
struct SC_futex_params {
|
||||
i32* userspace_address;
|
||||
int futex_op;
|
||||
i32 val;
|
||||
const timespec* timeout;
|
||||
};
|
||||
struct SC_futex_params {
|
||||
i32* userspace_address;
|
||||
int futex_op;
|
||||
i32 val;
|
||||
const timespec* timeout;
|
||||
};
|
||||
|
||||
struct SC_setkeymap_params {
|
||||
const char* map;
|
||||
const char* shift_map;
|
||||
const char* alt_map;
|
||||
const char* altgr_map;
|
||||
};
|
||||
struct SC_setkeymap_params {
|
||||
const char* map;
|
||||
const char* shift_map;
|
||||
const char* alt_map;
|
||||
const char* altgr_map;
|
||||
};
|
||||
|
||||
struct SC_create_thread_params {
|
||||
unsigned int m_detach_state = 0; // JOINABLE or DETACHED
|
||||
int m_schedule_priority = 30; // THREAD_PRIORITY_NORMAL
|
||||
// FIXME: Implment guard pages in create_thread (unreadable pages at "overflow" end of stack)
|
||||
// "If an implementation rounds up the value of guardsize to a multiple of {PAGESIZE},
|
||||
// a call to pthread_attr_getguardsize() specifying attr shall store in the guardsize
|
||||
// parameter the guard size specified by the previous pthread_attr_setguardsize() function call"
|
||||
// ... ok, if you say so posix. Guess we get to lie to people about guard page size
|
||||
unsigned int m_guard_page_size = 0; // Rounded up to PAGE_SIZE
|
||||
unsigned int m_reported_guard_page_size = 0; // The lie we tell callers
|
||||
unsigned int m_stack_size = 4 * MB; // Default PTHREAD_STACK_MIN
|
||||
void* m_stack_location = nullptr; // nullptr means any, o.w. process virtual address
|
||||
};
|
||||
struct SC_create_thread_params {
|
||||
unsigned int m_detach_state = 0; // JOINABLE or DETACHED
|
||||
int m_schedule_priority = 30; // THREAD_PRIORITY_NORMAL
|
||||
// FIXME: Implment guard pages in create_thread (unreadable pages at "overflow" end of stack)
|
||||
// "If an implementation rounds up the value of guardsize to a multiple of {PAGESIZE},
|
||||
// a call to pthread_attr_getguardsize() specifying attr shall store in the guardsize
|
||||
// parameter the guard size specified by the previous pthread_attr_setguardsize() function call"
|
||||
// ... ok, if you say so posix. Guess we get to lie to people about guard page size
|
||||
unsigned int m_guard_page_size = 0; // Rounded up to PAGE_SIZE
|
||||
unsigned int m_reported_guard_page_size = 0; // The lie we tell callers
|
||||
unsigned int m_stack_size = 4 * MB; // Default PTHREAD_STACK_MIN
|
||||
void* m_stack_location = nullptr; // nullptr means any, o.w. process virtual address
|
||||
};
|
||||
|
||||
struct SC_realpath_params {
|
||||
StringArgument path;
|
||||
MutableBufferArgument<char, size_t> buffer;
|
||||
};
|
||||
struct SC_realpath_params {
|
||||
StringArgument path;
|
||||
MutableBufferArgument<char, size_t> buffer;
|
||||
};
|
||||
|
||||
struct SC_set_mmap_name_params {
|
||||
void* addr;
|
||||
size_t size;
|
||||
StringArgument name;
|
||||
};
|
||||
struct SC_set_mmap_name_params {
|
||||
void* addr;
|
||||
size_t size;
|
||||
StringArgument name;
|
||||
};
|
||||
|
||||
struct SC_execve_params {
|
||||
StringArgument path;
|
||||
StringListArgument arguments;
|
||||
StringListArgument environment;
|
||||
};
|
||||
struct SC_execve_params {
|
||||
StringArgument path;
|
||||
StringListArgument arguments;
|
||||
StringListArgument environment;
|
||||
};
|
||||
|
||||
struct SC_readlink_params {
|
||||
StringArgument path;
|
||||
MutableBufferArgument<char, size_t> buffer;
|
||||
};
|
||||
struct SC_readlink_params {
|
||||
StringArgument path;
|
||||
MutableBufferArgument<char, size_t> buffer;
|
||||
};
|
||||
|
||||
struct SC_link_params {
|
||||
StringArgument old_path;
|
||||
StringArgument new_path;
|
||||
};
|
||||
struct SC_link_params {
|
||||
StringArgument old_path;
|
||||
StringArgument new_path;
|
||||
};
|
||||
|
||||
struct SC_chown_params {
|
||||
StringArgument path;
|
||||
u32 uid;
|
||||
u32 gid;
|
||||
};
|
||||
struct SC_chown_params {
|
||||
StringArgument path;
|
||||
u32 uid;
|
||||
u32 gid;
|
||||
};
|
||||
|
||||
struct SC_mknod_params {
|
||||
StringArgument path;
|
||||
u16 mode;
|
||||
u32 dev;
|
||||
};
|
||||
struct SC_mknod_params {
|
||||
StringArgument path;
|
||||
u16 mode;
|
||||
u32 dev;
|
||||
};
|
||||
|
||||
struct SC_symlink_params {
|
||||
StringArgument target;
|
||||
StringArgument linkpath;
|
||||
};
|
||||
struct SC_symlink_params {
|
||||
StringArgument target;
|
||||
StringArgument linkpath;
|
||||
};
|
||||
|
||||
struct SC_rename_params {
|
||||
StringArgument old_path;
|
||||
StringArgument new_path;
|
||||
};
|
||||
struct SC_rename_params {
|
||||
StringArgument old_path;
|
||||
StringArgument new_path;
|
||||
};
|
||||
|
||||
struct SC_mount_params {
|
||||
StringArgument source;
|
||||
StringArgument target;
|
||||
StringArgument fs_type;
|
||||
int flags;
|
||||
};
|
||||
struct SC_mount_params {
|
||||
StringArgument source;
|
||||
StringArgument target;
|
||||
StringArgument fs_type;
|
||||
int flags;
|
||||
};
|
||||
|
||||
struct SC_pledge_params {
|
||||
StringArgument promises;
|
||||
StringArgument execpromises;
|
||||
};
|
||||
struct SC_pledge_params {
|
||||
StringArgument promises;
|
||||
StringArgument execpromises;
|
||||
};
|
||||
|
||||
struct SC_unveil_params {
|
||||
StringArgument path;
|
||||
StringArgument permissions;
|
||||
};
|
||||
struct SC_unveil_params {
|
||||
StringArgument path;
|
||||
StringArgument permissions;
|
||||
};
|
||||
|
||||
struct SC_waitid_params {
|
||||
int idtype;
|
||||
int id;
|
||||
struct siginfo* infop;
|
||||
int options;
|
||||
};
|
||||
struct SC_waitid_params {
|
||||
int idtype;
|
||||
int id;
|
||||
struct siginfo* infop;
|
||||
int options;
|
||||
};
|
||||
|
||||
struct SC_stat_params {
|
||||
StringArgument path;
|
||||
struct stat* statbuf;
|
||||
bool follow_symlinks;
|
||||
};
|
||||
struct SC_stat_params {
|
||||
StringArgument path;
|
||||
struct stat* statbuf;
|
||||
bool follow_symlinks;
|
||||
};
|
||||
|
||||
void initialize();
|
||||
int sync();
|
||||
void initialize();
|
||||
int sync();
|
||||
|
||||
inline u32 invoke(Function function)
|
||||
{
|
||||
u32 result;
|
||||
asm volatile("int $0x82"
|
||||
: "=a"(result)
|
||||
: "a"(function)
|
||||
: "memory");
|
||||
return result;
|
||||
}
|
||||
inline u32 invoke(Function function)
|
||||
{
|
||||
u32 result;
|
||||
asm volatile("int $0x82"
|
||||
: "=a"(result)
|
||||
: "a"(function)
|
||||
: "memory");
|
||||
return result;
|
||||
}
|
||||
|
||||
template<typename T1>
|
||||
inline u32 invoke(Function function, T1 arg1)
|
||||
{
|
||||
u32 result;
|
||||
asm volatile("int $0x82"
|
||||
: "=a"(result)
|
||||
: "a"(function), "d"((u32)arg1)
|
||||
: "memory");
|
||||
return result;
|
||||
}
|
||||
template<typename T1>
|
||||
inline u32 invoke(Function function, T1 arg1)
|
||||
{
|
||||
u32 result;
|
||||
asm volatile("int $0x82"
|
||||
: "=a"(result)
|
||||
: "a"(function), "d"((u32)arg1)
|
||||
: "memory");
|
||||
return result;
|
||||
}
|
||||
|
||||
template<typename T1, typename T2>
|
||||
inline u32 invoke(Function function, T1 arg1, T2 arg2)
|
||||
{
|
||||
u32 result;
|
||||
asm volatile("int $0x82"
|
||||
: "=a"(result)
|
||||
: "a"(function), "d"((u32)arg1), "c"((u32)arg2)
|
||||
: "memory");
|
||||
return result;
|
||||
}
|
||||
template<typename T1, typename T2>
|
||||
inline u32 invoke(Function function, T1 arg1, T2 arg2)
|
||||
{
|
||||
u32 result;
|
||||
asm volatile("int $0x82"
|
||||
: "=a"(result)
|
||||
: "a"(function), "d"((u32)arg1), "c"((u32)arg2)
|
||||
: "memory");
|
||||
return result;
|
||||
}
|
||||
|
||||
template<typename T1, typename T2, typename T3>
|
||||
inline u32 invoke(Function function, T1 arg1, T2 arg2, T3 arg3)
|
||||
{
|
||||
u32 result;
|
||||
asm volatile("int $0x82"
|
||||
: "=a"(result)
|
||||
: "a"(function), "d"((u32)arg1), "c"((u32)arg2), "b"((u32)arg3)
|
||||
: "memory");
|
||||
return result;
|
||||
}
|
||||
template<typename T1, typename T2, typename T3>
|
||||
inline u32 invoke(Function function, T1 arg1, T2 arg2, T3 arg3)
|
||||
{
|
||||
u32 result;
|
||||
asm volatile("int $0x82"
|
||||
: "=a"(result)
|
||||
: "a"(function), "d"((u32)arg1), "c"((u32)arg2), "b"((u32)arg3)
|
||||
: "memory");
|
||||
return result;
|
||||
}
|
||||
#endif
|
||||
|
||||
}
|
||||
|
|
|
@ -121,7 +121,7 @@ public:
|
|||
int sample_count() const { return m_sample_count; }
|
||||
const void* data() const { return m_buffer->data(); }
|
||||
int size_in_bytes() const { return m_sample_count * (int)sizeof(Sample); }
|
||||
int shared_buffer_id() const { return m_buffer->shared_buffer_id(); }
|
||||
int shbuf_id() const { return m_buffer->shbuf_id(); }
|
||||
SharedBuffer& shared_buffer() { return *m_buffer; }
|
||||
|
||||
private:
|
||||
|
|
|
@ -45,7 +45,7 @@ void ClientConnection::enqueue(const Buffer& buffer)
|
|||
{
|
||||
for (;;) {
|
||||
const_cast<Buffer&>(buffer).shared_buffer().share_with(server_pid());
|
||||
auto response = send_sync<Messages::AudioServer::EnqueueBuffer>(buffer.shared_buffer_id(), buffer.sample_count());
|
||||
auto response = send_sync<Messages::AudioServer::EnqueueBuffer>(buffer.shbuf_id(), buffer.sample_count());
|
||||
if (response->success())
|
||||
break;
|
||||
sleep(1);
|
||||
|
@ -55,7 +55,7 @@ void ClientConnection::enqueue(const Buffer& buffer)
|
|||
bool ClientConnection::try_enqueue(const Buffer& buffer)
|
||||
{
|
||||
const_cast<Buffer&>(buffer).shared_buffer().share_with(server_pid());
|
||||
auto response = send_sync<Messages::AudioServer::EnqueueBuffer>(buffer.shared_buffer_id(), buffer.sample_count());
|
||||
auto response = send_sync<Messages::AudioServer::EnqueueBuffer>(buffer.shbuf_id(), buffer.sample_count());
|
||||
return response->success();
|
||||
}
|
||||
|
||||
|
|
|
@ -529,21 +529,21 @@ void sync()
|
|||
syscall(SC_sync);
|
||||
}
|
||||
|
||||
int create_shared_buffer(int size, void** buffer)
|
||||
int shbuf_create(int size, void** buffer)
|
||||
{
|
||||
int rc = syscall(SC_create_shared_buffer, size, buffer);
|
||||
int rc = syscall(SC_shbuf_create, size, buffer);
|
||||
__RETURN_WITH_ERRNO(rc, rc, -1);
|
||||
}
|
||||
|
||||
int share_buffer_with(int shared_buffer_id, pid_t peer_pid)
|
||||
int shbuf_allow_pid(int shbuf_id, pid_t peer_pid)
|
||||
{
|
||||
int rc = syscall(SC_share_buffer_with, shared_buffer_id, peer_pid);
|
||||
int rc = syscall(SC_shbuf_allow_pid, shbuf_id, peer_pid);
|
||||
__RETURN_WITH_ERRNO(rc, rc, -1);
|
||||
}
|
||||
|
||||
int share_buffer_globally(int shared_buffer_id)
|
||||
int shbuf_allow_all(int shbuf_id)
|
||||
{
|
||||
int rc = syscall(SC_share_buffer_globally, shared_buffer_id);
|
||||
int rc = syscall(SC_shbuf_allow_all, shbuf_id);
|
||||
__RETURN_WITH_ERRNO(rc, rc, -1);
|
||||
}
|
||||
|
||||
|
@ -553,9 +553,9 @@ int set_process_icon(int icon_id)
|
|||
__RETURN_WITH_ERRNO(rc, rc, -1);
|
||||
}
|
||||
|
||||
void* get_shared_buffer(int shared_buffer_id)
|
||||
void* shbuf_get(int shbuf_id)
|
||||
{
|
||||
int rc = syscall(SC_get_shared_buffer, shared_buffer_id);
|
||||
int rc = syscall(SC_shbuf_get, shbuf_id);
|
||||
if (rc < 0 && -rc < EMAXERRNO) {
|
||||
errno = -rc;
|
||||
return (void*)-1;
|
||||
|
@ -563,21 +563,21 @@ void* get_shared_buffer(int shared_buffer_id)
|
|||
return (void*)rc;
|
||||
}
|
||||
|
||||
int release_shared_buffer(int shared_buffer_id)
|
||||
int shbuf_release(int shbuf_id)
|
||||
{
|
||||
int rc = syscall(SC_release_shared_buffer, shared_buffer_id);
|
||||
int rc = syscall(SC_shbuf_release, shbuf_id);
|
||||
__RETURN_WITH_ERRNO(rc, rc, -1);
|
||||
}
|
||||
|
||||
int get_shared_buffer_size(int shared_buffer_id)
|
||||
int shbuf_get_size(int shbuf_id)
|
||||
{
|
||||
int rc = syscall(SC_get_shared_buffer_size, shared_buffer_id);
|
||||
int rc = syscall(SC_shbuf_get_size, shbuf_id);
|
||||
__RETURN_WITH_ERRNO(rc, rc, -1);
|
||||
}
|
||||
|
||||
int seal_shared_buffer(int shared_buffer_id)
|
||||
int shbuf_seal(int shbuf_id)
|
||||
{
|
||||
int rc = syscall(SC_seal_shared_buffer, shared_buffer_id);
|
||||
int rc = syscall(SC_shbuf_seal, shbuf_id);
|
||||
__RETURN_WITH_ERRNO(rc, rc, -1);
|
||||
}
|
||||
|
||||
|
|
|
@ -61,13 +61,13 @@ void sysbeep();
|
|||
int systrace(pid_t);
|
||||
int gettid();
|
||||
int donate(int tid);
|
||||
int create_shared_buffer(int, void** buffer);
|
||||
int share_buffer_with(int, pid_t peer_pid);
|
||||
int share_buffer_globally(int);
|
||||
void* get_shared_buffer(int shared_buffer_id);
|
||||
int release_shared_buffer(int shared_buffer_id);
|
||||
int seal_shared_buffer(int shared_buffer_id);
|
||||
int get_shared_buffer_size(int shared_buffer_id);
|
||||
int shbuf_create(int, void** buffer);
|
||||
int shbuf_allow_pid(int, pid_t peer_pid);
|
||||
int shbuf_allow_all(int);
|
||||
void* shbuf_get(int shbuf_id);
|
||||
int shbuf_release(int shbuf_id);
|
||||
int shbuf_seal(int shbuf_id);
|
||||
int shbuf_get_size(int shbuf_id);
|
||||
int set_process_icon(int icon_id);
|
||||
inline int getpagesize() { return 4096; }
|
||||
pid_t fork();
|
||||
|
|
|
@ -46,9 +46,9 @@ Clipboard::Clipboard()
|
|||
Clipboard::DataAndType Clipboard::data_and_type() const
|
||||
{
|
||||
auto response = WindowServerConnection::the().send_sync<Messages::WindowServer::GetClipboardContents>();
|
||||
if (response->shared_buffer_id() < 0)
|
||||
if (response->shbuf_id() < 0)
|
||||
return {};
|
||||
auto shared_buffer = SharedBuffer::create_from_shared_buffer_id(response->shared_buffer_id());
|
||||
auto shared_buffer = SharedBuffer::create_from_shbuf_id(response->shbuf_id());
|
||||
if (!shared_buffer) {
|
||||
dbgprintf("GUI::Clipboard::data() failed to attach to the shared buffer\n");
|
||||
return {};
|
||||
|
@ -76,7 +76,7 @@ void Clipboard::set_data(const StringView& data, const String& type)
|
|||
shared_buffer->seal();
|
||||
shared_buffer->share_with(WindowServerConnection::the().server_pid());
|
||||
|
||||
WindowServerConnection::the().send_sync<Messages::WindowServer::SetClipboardContents>(shared_buffer->shared_buffer_id(), data.length(), type);
|
||||
WindowServerConnection::the().send_sync<Messages::WindowServer::SetClipboardContents>(shared_buffer->shbuf_id(), data.length(), type);
|
||||
}
|
||||
|
||||
void Clipboard::did_receive_clipboard_contents_changed(Badge<WindowServerConnection>, const String& data_type)
|
||||
|
|
|
@ -55,7 +55,7 @@ DragOperation::Outcome DragOperation::exec()
|
|||
if (m_bitmap) {
|
||||
shared_bitmap = m_bitmap->to_shareable_bitmap();
|
||||
shared_bitmap->shared_buffer()->share_with(WindowServerConnection::the().server_pid());
|
||||
bitmap_id = shared_bitmap->shared_buffer_id();
|
||||
bitmap_id = shared_bitmap->shbuf_id();
|
||||
bitmap_size = shared_bitmap->size();
|
||||
}
|
||||
|
||||
|
|
|
@ -128,7 +128,7 @@ int Menu::realize_menu()
|
|||
if (action.icon()) {
|
||||
ASSERT(action.icon()->format() == Gfx::BitmapFormat::RGBA32);
|
||||
ASSERT(action.icon()->size() == Gfx::Size(16, 16));
|
||||
if (action.icon()->shared_buffer_id() == -1) {
|
||||
if (action.icon()->shbuf_id() == -1) {
|
||||
auto shared_buffer = SharedBuffer::create_with_size(action.icon()->size_in_bytes());
|
||||
ASSERT(shared_buffer);
|
||||
auto shared_icon = Gfx::Bitmap::create_with_shared_buffer(Gfx::BitmapFormat::RGBA32, *shared_buffer, action.icon()->size());
|
||||
|
@ -137,7 +137,7 @@ int Menu::realize_menu()
|
|||
shared_buffer->share_with(WindowServerConnection::the().server_pid());
|
||||
action.set_icon(shared_icon);
|
||||
}
|
||||
icon_buffer_id = action.icon()->shared_buffer_id();
|
||||
icon_buffer_id = action.icon()->shbuf_id();
|
||||
}
|
||||
auto shortcut_text = action.shortcut().is_valid() ? action.shortcut().to_string() : String();
|
||||
bool exclusive = action.group() && action.group()->is_exclusive() && action.is_checkable();
|
||||
|
|
|
@ -477,7 +477,7 @@ void Window::set_hovered_widget(Widget* widget)
|
|||
|
||||
void Window::set_current_backing_bitmap(Gfx::Bitmap& bitmap, bool flush_immediately)
|
||||
{
|
||||
WindowServerConnection::the().send_sync<Messages::WindowServer::SetWindowBackingStore>(m_window_id, 32, bitmap.pitch(), bitmap.shared_buffer_id(), bitmap.has_alpha_channel(), bitmap.size(), flush_immediately);
|
||||
WindowServerConnection::the().send_sync<Messages::WindowServer::SetWindowBackingStore>(m_window_id, 32, bitmap.pitch(), bitmap.shbuf_id(), bitmap.has_alpha_channel(), bitmap.size(), flush_immediately);
|
||||
}
|
||||
|
||||
void Window::flip(const Vector<Gfx::Rect, 32>& dirty_rects)
|
||||
|
@ -551,17 +551,17 @@ void Window::apply_icon()
|
|||
if (!m_window_id)
|
||||
return;
|
||||
|
||||
int rc = seal_shared_buffer(m_icon->shared_buffer_id());
|
||||
int rc = shbuf_seal(m_icon->shbuf_id());
|
||||
ASSERT(rc == 0);
|
||||
|
||||
rc = share_buffer_globally(m_icon->shared_buffer_id());
|
||||
rc = shbuf_allow_all(m_icon->shbuf_id());
|
||||
ASSERT(rc == 0);
|
||||
|
||||
static bool has_set_process_icon;
|
||||
if (!has_set_process_icon)
|
||||
set_process_icon(m_icon->shared_buffer_id());
|
||||
set_process_icon(m_icon->shbuf_id());
|
||||
|
||||
WindowServerConnection::the().send_sync<Messages::WindowServer::SetWindowIconBitmap>(m_window_id, m_icon->shared_buffer_id(), m_icon->size());
|
||||
WindowServerConnection::the().send_sync<Messages::WindowServer::SetWindowIconBitmap>(m_window_id, m_icon->shbuf_id(), m_icon->size());
|
||||
}
|
||||
|
||||
void Window::start_wm_resize()
|
||||
|
|
|
@ -53,9 +53,9 @@ WindowServerConnection& WindowServerConnection::the()
|
|||
return *s_connection;
|
||||
}
|
||||
|
||||
static void set_system_theme_from_shared_buffer_id(int id)
|
||||
static void set_system_theme_from_shbuf_id(int id)
|
||||
{
|
||||
auto system_theme = SharedBuffer::create_from_shared_buffer_id(id);
|
||||
auto system_theme = SharedBuffer::create_from_shbuf_id(id);
|
||||
ASSERT(system_theme);
|
||||
Gfx::set_system_theme(*system_theme);
|
||||
Application::the().set_system_palette(*system_theme);
|
||||
|
@ -65,13 +65,13 @@ void WindowServerConnection::handshake()
|
|||
{
|
||||
auto response = send_sync<Messages::WindowServer::Greet>();
|
||||
set_my_client_id(response->client_id());
|
||||
set_system_theme_from_shared_buffer_id(response->system_theme_buffer_id());
|
||||
set_system_theme_from_shbuf_id(response->system_theme_buffer_id());
|
||||
Desktop::the().did_receive_screen_rect({}, response->screen_rect());
|
||||
}
|
||||
|
||||
void WindowServerConnection::handle(const Messages::WindowClient::UpdateSystemTheme& message)
|
||||
{
|
||||
set_system_theme_from_shared_buffer_id(message.system_theme_buffer_id());
|
||||
set_system_theme_from_shbuf_id(message.system_theme_buffer_id());
|
||||
Window::update_all_windows({});
|
||||
}
|
||||
|
||||
|
|
|
@ -158,9 +158,9 @@ void Bitmap::set_volatile()
|
|||
return rc == 0;
|
||||
}
|
||||
|
||||
int Bitmap::shared_buffer_id() const
|
||||
int Bitmap::shbuf_id() const
|
||||
{
|
||||
return m_shared_buffer ? m_shared_buffer->shared_buffer_id() : -1;
|
||||
return m_shared_buffer ? m_shared_buffer->shbuf_id() : -1;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -64,7 +64,7 @@ public:
|
|||
int width() const { return m_size.width(); }
|
||||
int height() const { return m_size.height(); }
|
||||
size_t pitch() const { return m_pitch; }
|
||||
int shared_buffer_id() const;
|
||||
int shbuf_id() const;
|
||||
|
||||
SharedBuffer* shared_buffer() { return m_shared_buffer.ptr(); }
|
||||
const SharedBuffer* shared_buffer() const { return m_shared_buffer.ptr(); }
|
||||
|
|
|
@ -43,7 +43,7 @@ const SystemTheme& current_system_theme()
|
|||
int current_system_theme_buffer_id()
|
||||
{
|
||||
ASSERT(theme_buffer);
|
||||
return theme_buffer->shared_buffer_id();
|
||||
return theme_buffer->shbuf_id();
|
||||
}
|
||||
|
||||
void set_system_theme(SharedBuffer& buffer)
|
||||
|
|
|
@ -66,9 +66,9 @@ void Client::handle(const Messages::ProtocolClient::DownloadFinished& message)
|
|||
{
|
||||
RefPtr<Download> download;
|
||||
if ((download = m_downloads.get(message.download_id()).value_or(nullptr))) {
|
||||
download->did_finish({}, message.success(), message.total_size(), message.shared_buffer_id());
|
||||
download->did_finish({}, message.success(), message.total_size(), message.shbuf_id());
|
||||
}
|
||||
send_sync<Messages::ProtocolServer::DisownSharedBuffer>(message.shared_buffer_id());
|
||||
send_sync<Messages::ProtocolServer::DisownSharedBuffer>(message.shbuf_id());
|
||||
m_downloads.remove(message.download_id());
|
||||
}
|
||||
|
||||
|
|
|
@ -41,15 +41,15 @@ bool Download::stop()
|
|||
return m_client->stop_download({}, *this);
|
||||
}
|
||||
|
||||
void Download::did_finish(Badge<Client>, bool success, u32 total_size, i32 shared_buffer_id)
|
||||
void Download::did_finish(Badge<Client>, bool success, u32 total_size, i32 shbuf_id)
|
||||
{
|
||||
if (!on_finish)
|
||||
return;
|
||||
|
||||
ByteBuffer payload;
|
||||
RefPtr<SharedBuffer> shared_buffer;
|
||||
if (success && shared_buffer_id != -1) {
|
||||
shared_buffer = SharedBuffer::create_from_shared_buffer_id(shared_buffer_id);
|
||||
if (success && shbuf_id != -1) {
|
||||
shared_buffer = SharedBuffer::create_from_shbuf_id(shbuf_id);
|
||||
payload = ByteBuffer::wrap(shared_buffer->data(), total_size);
|
||||
}
|
||||
on_finish(success, payload, move(shared_buffer));
|
||||
|
|
|
@ -49,7 +49,7 @@ public:
|
|||
Function<void(bool success, const ByteBuffer& payload, RefPtr<SharedBuffer> payload_storage)> on_finish;
|
||||
Function<void(u32 total_size, u32 downloaded_size)> on_progress;
|
||||
|
||||
void did_finish(Badge<Client>, bool success, u32 total_size, i32 shared_buffer_id);
|
||||
void did_finish(Badge<Client>, bool success, u32 total_size, i32 shbuf_id);
|
||||
void did_progress(Badge<Client>, u32 total_size, u32 downloaded_size);
|
||||
|
||||
private:
|
||||
|
|
|
@ -92,7 +92,7 @@ OwnPtr<Messages::AudioServer::SetMainMixVolumeResponse> ASClientConnection::hand
|
|||
|
||||
OwnPtr<Messages::AudioServer::EnqueueBufferResponse> ASClientConnection::handle(const Messages::AudioServer::EnqueueBuffer& message)
|
||||
{
|
||||
auto shared_buffer = SharedBuffer::create_from_shared_buffer_id(message.buffer_id());
|
||||
auto shared_buffer = SharedBuffer::create_from_shbuf_id(message.buffer_id());
|
||||
if (!shared_buffer) {
|
||||
// FIXME: The shared buffer should have been retrieved for us already.
|
||||
// We don't want to do IPC error checking at this layer.
|
||||
|
|
|
@ -64,7 +64,7 @@ public:
|
|||
++m_played_samples;
|
||||
|
||||
if (m_position >= m_current->sample_count()) {
|
||||
m_client->did_finish_playing_buffer({}, m_current->shared_buffer_id());
|
||||
m_client->did_finish_playing_buffer({}, m_current->shbuf_id());
|
||||
m_current = nullptr;
|
||||
m_position = 0;
|
||||
}
|
||||
|
@ -93,7 +93,7 @@ public:
|
|||
int get_playing_buffer() const
|
||||
{
|
||||
if (m_current)
|
||||
return m_current->shared_buffer_id();
|
||||
return m_current->shbuf_id();
|
||||
return -1;
|
||||
}
|
||||
|
||||
|
|
|
@ -82,9 +82,9 @@ void PSClientConnection::did_finish_download(Badge<Download>, Download& download
|
|||
memcpy(buffer->data(), download.payload().data(), download.payload().size());
|
||||
buffer->seal();
|
||||
buffer->share_with(client_pid());
|
||||
m_shared_buffers.set(buffer->shared_buffer_id(), buffer);
|
||||
m_shared_buffers.set(buffer->shbuf_id(), buffer);
|
||||
}
|
||||
post_message(Messages::ProtocolClient::DownloadFinished(download.id(), success, download.total_size(), buffer ? buffer->shared_buffer_id() : -1));
|
||||
post_message(Messages::ProtocolClient::DownloadFinished(download.id(), success, download.total_size(), buffer ? buffer->shbuf_id() : -1));
|
||||
}
|
||||
|
||||
void PSClientConnection::did_progress_download(Badge<Download>, Download& download)
|
||||
|
@ -99,6 +99,6 @@ OwnPtr<Messages::ProtocolServer::GreetResponse> PSClientConnection::handle(const
|
|||
|
||||
OwnPtr<Messages::ProtocolServer::DisownSharedBufferResponse> PSClientConnection::handle(const Messages::ProtocolServer::DisownSharedBuffer& message)
|
||||
{
|
||||
m_shared_buffers.remove(message.shared_buffer_id());
|
||||
m_shared_buffers.remove(message.shbuf_id());
|
||||
return make<Messages::ProtocolServer::DisownSharedBufferResponse>();
|
||||
}
|
||||
|
|
|
@ -2,5 +2,5 @@ endpoint ProtocolClient = 13
|
|||
{
|
||||
// Download notifications
|
||||
DownloadProgress(i32 download_id, u32 total_size, u32 downloaded_size) =|
|
||||
DownloadFinished(i32 download_id, bool success, u32 total_size, i32 shared_buffer_id) =|
|
||||
DownloadFinished(i32 download_id, bool success, u32 total_size, i32 shbuf_id) =|
|
||||
}
|
||||
|
|
|
@ -4,7 +4,7 @@ endpoint ProtocolServer = 9
|
|||
Greet() => (i32 client_id)
|
||||
|
||||
// FIXME: It would be nice if the kernel provided a way to avoid this
|
||||
DisownSharedBuffer(i32 shared_buffer_id) => ()
|
||||
DisownSharedBuffer(i32 shbuf_id) => ()
|
||||
|
||||
// Test if a specific protocol is supported, e.g "http"
|
||||
IsSupportedProtocol(String protocol) => (bool supported)
|
||||
|
|
|
@ -193,7 +193,7 @@ OwnPtr<Messages::WindowServer::AddMenuItemResponse> ClientConnection::handle(con
|
|||
auto& menu = *(*it).value;
|
||||
auto menu_item = make<MenuItem>(menu, identifier, message.text(), message.shortcut(), message.enabled(), message.checkable(), message.checked());
|
||||
if (message.icon_buffer_id() != -1) {
|
||||
auto icon_buffer = SharedBuffer::create_from_shared_buffer_id(message.icon_buffer_id());
|
||||
auto icon_buffer = SharedBuffer::create_from_shbuf_id(message.icon_buffer_id());
|
||||
if (!icon_buffer)
|
||||
return nullptr;
|
||||
// FIXME: Verify that the icon buffer can accomodate a 16x16 bitmap view.
|
||||
|
@ -349,7 +349,7 @@ OwnPtr<Messages::WindowServer::SetWindowIconBitmapResponse> ClientConnection::ha
|
|||
}
|
||||
auto& window = *(*it).value;
|
||||
|
||||
auto icon_buffer = SharedBuffer::create_from_shared_buffer_id(message.icon_buffer_id());
|
||||
auto icon_buffer = SharedBuffer::create_from_shbuf_id(message.icon_buffer_id());
|
||||
|
||||
if (!icon_buffer) {
|
||||
window.set_default_icon();
|
||||
|
@ -393,7 +393,7 @@ OwnPtr<Messages::WindowServer::GetWindowRectResponse> ClientConnection::handle(c
|
|||
|
||||
OwnPtr<Messages::WindowServer::SetClipboardContentsResponse> ClientConnection::handle(const Messages::WindowServer::SetClipboardContents& message)
|
||||
{
|
||||
auto shared_buffer = SharedBuffer::create_from_shared_buffer_id(message.shared_buffer_id());
|
||||
auto shared_buffer = SharedBuffer::create_from_shbuf_id(message.shbuf_id());
|
||||
if (!shared_buffer) {
|
||||
did_misbehave("SetClipboardContents: Bad shared buffer ID");
|
||||
return nullptr;
|
||||
|
@ -406,7 +406,7 @@ OwnPtr<Messages::WindowServer::GetClipboardContentsResponse> ClientConnection::h
|
|||
{
|
||||
auto& clipboard = Clipboard::the();
|
||||
|
||||
i32 shared_buffer_id = -1;
|
||||
i32 shbuf_id = -1;
|
||||
if (clipboard.size()) {
|
||||
// FIXME: Optimize case where an app is copy/pasting within itself.
|
||||
// We can just reuse the SharedBuffer then, since it will have the same peer PID.
|
||||
|
@ -416,13 +416,13 @@ OwnPtr<Messages::WindowServer::GetClipboardContentsResponse> ClientConnection::h
|
|||
memcpy(shared_buffer->data(), clipboard.data(), clipboard.size());
|
||||
shared_buffer->seal();
|
||||
shared_buffer->share_with(client_pid());
|
||||
shared_buffer_id = shared_buffer->shared_buffer_id();
|
||||
shbuf_id = shared_buffer->shbuf_id();
|
||||
|
||||
// FIXME: This is a workaround for the fact that SharedBuffers will go away if neither side is retaining them.
|
||||
// After we respond to GetClipboardContents, we have to wait for the client to ref the buffer on his side.
|
||||
m_last_sent_clipboard_content = move(shared_buffer);
|
||||
}
|
||||
return make<Messages::WindowServer::GetClipboardContentsResponse>(shared_buffer_id, clipboard.size(), clipboard.data_type());
|
||||
return make<Messages::WindowServer::GetClipboardContentsResponse>(shbuf_id, clipboard.size(), clipboard.data_type());
|
||||
}
|
||||
|
||||
OwnPtr<Messages::WindowServer::CreateWindowResponse> ClientConnection::handle(const Messages::WindowServer::CreateWindow& message)
|
||||
|
@ -509,10 +509,10 @@ OwnPtr<Messages::WindowServer::SetWindowBackingStoreResponse> ClientConnection::
|
|||
return nullptr;
|
||||
}
|
||||
auto& window = *(*it).value;
|
||||
if (window.last_backing_store() && window.last_backing_store()->shared_buffer_id() == message.shared_buffer_id()) {
|
||||
if (window.last_backing_store() && window.last_backing_store()->shbuf_id() == message.shbuf_id()) {
|
||||
window.swap_backing_stores();
|
||||
} else {
|
||||
auto shared_buffer = SharedBuffer::create_from_shared_buffer_id(message.shared_buffer_id());
|
||||
auto shared_buffer = SharedBuffer::create_from_shbuf_id(message.shbuf_id());
|
||||
if (!shared_buffer)
|
||||
return make<Messages::WindowServer::SetWindowBackingStoreResponse>();
|
||||
auto backing_store = Gfx::Bitmap::create_with_shared_buffer(
|
||||
|
@ -669,7 +669,7 @@ OwnPtr<Messages::WindowServer::StartDragResponse> ClientConnection::handle(const
|
|||
|
||||
RefPtr<Gfx::Bitmap> bitmap;
|
||||
if (message.bitmap_id() != -1) {
|
||||
auto shared_buffer = SharedBuffer::create_from_shared_buffer_id(message.bitmap_id());
|
||||
auto shared_buffer = SharedBuffer::create_from_shbuf_id(message.bitmap_id());
|
||||
ssize_t size_in_bytes = message.bitmap_size().area() * sizeof(Gfx::RGBA32);
|
||||
if (size_in_bytes > shared_buffer->size()) {
|
||||
did_misbehave("SetAppletBackingStore: Shared buffer is too small for applet size");
|
||||
|
|
|
@ -252,13 +252,13 @@ void WindowManager::tell_wm_listener_about_window_icon(Window& listener, Window&
|
|||
return;
|
||||
if (window.is_internal())
|
||||
return;
|
||||
if (window.icon().shared_buffer_id() == -1)
|
||||
if (window.icon().shbuf_id() == -1)
|
||||
return;
|
||||
dbg() << "WindowServer: Sharing icon buffer " << window.icon().shared_buffer_id() << " with PID " << listener.client()->client_pid();
|
||||
if (share_buffer_with(window.icon().shared_buffer_id(), listener.client()->client_pid()) < 0) {
|
||||
dbg() << "WindowServer: Sharing icon buffer " << window.icon().shbuf_id() << " with PID " << listener.client()->client_pid();
|
||||
if (shbuf_allow_pid(window.icon().shbuf_id(), listener.client()->client_pid()) < 0) {
|
||||
ASSERT_NOT_REACHED();
|
||||
}
|
||||
listener.client()->post_message(Messages::WindowClient::WM_WindowIconBitmapChanged(listener.window_id(), window.client_id(), window.window_id(), window.icon().shared_buffer_id(), window.icon().size()));
|
||||
listener.client()->post_message(Messages::WindowClient::WM_WindowIconBitmapChanged(listener.window_id(), window.client_id(), window.window_id(), window.icon().shbuf_id(), window.icon().size()));
|
||||
}
|
||||
|
||||
void WindowManager::tell_wm_listeners_window_state_changed(Window& window)
|
||||
|
|
|
@ -57,9 +57,9 @@ endpoint WindowServer = 2
|
|||
SetGlobalCursorTracking(i32 window_id, bool enabled) => ()
|
||||
SetWindowOpacity(i32 window_id, float opacity) => ()
|
||||
|
||||
SetWindowBackingStore(i32 window_id, i32 bpp, i32 pitch, i32 shared_buffer_id, bool has_alpha_channel, Gfx::Size size, bool flush_immediately) => ()
|
||||
GetClipboardContents() => (i32 shared_buffer_id, i32 content_size, String content_type)
|
||||
SetClipboardContents(i32 shared_buffer_id, i32 content_size, String content_type) => ()
|
||||
SetWindowBackingStore(i32 window_id, i32 bpp, i32 pitch, i32 shbuf_id, bool has_alpha_channel, Gfx::Size size, bool flush_immediately) => ()
|
||||
GetClipboardContents() => (i32 shbuf_id, i32 content_size, String content_type)
|
||||
SetClipboardContents(i32 shbuf_id, i32 content_size, String content_type) => ()
|
||||
|
||||
WM_SetActiveWindow(i32 client_id, i32 window_id) =|
|
||||
WM_SetWindowMinimized(i32 client_id, i32 window_id, bool minimized) =|
|
||||
|
|
Loading…
Reference in a new issue