1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-07-15 14:37:35 +00:00

Rename ProcessInspectionScope to ProcessInspectionHandle.

It might be useful to pass these things around.
This commit is contained in:
Andreas Kling 2018-11-10 16:50:42 +01:00
parent 2ac5e14c08
commit a768c2b919
2 changed files with 16 additions and 10 deletions

View file

@ -30,7 +30,7 @@ ProcFileSystem::~ProcFileSystem()
ByteBuffer procfs$pid_fds(Process& process) ByteBuffer procfs$pid_fds(Process& process)
{ {
ProcessInspectionScope scope(process); ProcessInspectionHandle handle(process);
char* buffer; char* buffer;
auto stringImpl = StringImpl::createUninitialized(process.number_of_open_file_descriptors() * 80, buffer); auto stringImpl = StringImpl::createUninitialized(process.number_of_open_file_descriptors() * 80, buffer);
memset(buffer, 0, stringImpl->length()); memset(buffer, 0, stringImpl->length());
@ -47,7 +47,7 @@ ByteBuffer procfs$pid_fds(Process& process)
ByteBuffer procfs$pid_vm(Process& process) ByteBuffer procfs$pid_vm(Process& process)
{ {
ProcessInspectionScope scope(process); ProcessInspectionHandle handle(process);
char* buffer; char* buffer;
auto stringImpl = StringImpl::createUninitialized(80 + process.regionCount() * 160 + 4096, buffer); auto stringImpl = StringImpl::createUninitialized(80 + process.regionCount() * 160 + 4096, buffer);
memset(buffer, 0, stringImpl->length()); memset(buffer, 0, stringImpl->length());
@ -80,7 +80,7 @@ ByteBuffer procfs$pid_vm(Process& process)
ByteBuffer procfs$pid_stack(Process& process) ByteBuffer procfs$pid_stack(Process& process)
{ {
ProcessInspectionScope scope(process); ProcessInspectionHandle handle(process);
ProcessPagingScope pagingScope(process); ProcessPagingScope pagingScope(process);
struct RecognizedSymbol { struct RecognizedSymbol {
dword address; dword address;
@ -112,7 +112,7 @@ ByteBuffer procfs$pid_stack(Process& process)
ByteBuffer procfs$pid_regs(Process& process) ByteBuffer procfs$pid_regs(Process& process)
{ {
ProcessInspectionScope scope(process); ProcessInspectionHandle handle(process);
auto& tss = process.tss(); auto& tss = process.tss();
auto buffer = ByteBuffer::createUninitialized(1024); auto buffer = ByteBuffer::createUninitialized(1024);
char* ptr = (char*)buffer.pointer(); char* ptr = (char*)buffer.pointer();
@ -133,7 +133,7 @@ ByteBuffer procfs$pid_regs(Process& process)
ByteBuffer procfs$pid_exe(Process& process) ByteBuffer procfs$pid_exe(Process& process)
{ {
ProcessInspectionScope scope(process); ProcessInspectionHandle handle(process);
auto inode = process.executableInode(); auto inode = process.executableInode();
return VirtualFileSystem::the().absolutePath(inode).toByteBuffer(); return VirtualFileSystem::the().absolutePath(inode).toByteBuffer();
} }
@ -285,7 +285,6 @@ ByteBuffer procfs$cpuinfo()
ByteBuffer procfs$kmalloc() ByteBuffer procfs$kmalloc()
{ {
InterruptDisabler disabler;
auto buffer = ByteBuffer::createUninitialized(256); auto buffer = ByteBuffer::createUninitialized(256);
char* ptr = (char*)buffer.pointer(); char* ptr = (char*)buffer.pointer();
ptr += ksprintf(ptr, "eternal: %u\npage-aligned: %u\nallocated: %u\nfree: %u\n", kmalloc_sum_eternal, sum_alloc, sum_free); ptr += ksprintf(ptr, "eternal: %u\npage-aligned: %u\nallocated: %u\nfree: %u\n", kmalloc_sum_eternal, sum_alloc, sum_free);
@ -326,6 +325,7 @@ ByteBuffer procfs$vnodes()
char* ptr = (char*)buffer.pointer(); char* ptr = (char*)buffer.pointer();
for (size_t i = 0; i < vfs.m_maxNodeCount; ++i) { for (size_t i = 0; i < vfs.m_maxNodeCount; ++i) {
auto& vnode = vfs.m_nodes[i]; auto& vnode = vfs.m_nodes[i];
// FIXME: Retain the vnode while inspecting it.
if (!vnode.inUse()) if (!vnode.inUse())
continue; continue;
auto path = vfs.absolutePath(vnode.inode); auto path = vfs.absolutePath(vnode.inode);

View file

@ -288,19 +288,25 @@ private:
Region* m_signal_stack_kernel_region { nullptr }; Region* m_signal_stack_kernel_region { nullptr };
}; };
class ProcessInspectionScope { extern Process* current;
class ProcessInspectionHandle {
public: public:
ProcessInspectionScope(Process& process) ProcessInspectionHandle(Process& process)
: m_process(process) : m_process(process)
, m_original_state(process.state()) , m_original_state(process.state())
{ {
m_process.set_state(Process::BeingInspected); if (&process != current)
m_process.set_state(Process::BeingInspected);
} }
~ProcessInspectionScope() ~ProcessInspectionHandle()
{ {
m_process.set_state(m_original_state); m_process.set_state(m_original_state);
} }
Process* operator->() { return &m_process; }
Process& operator*() { return m_process; }
private: private:
Process& m_process; Process& m_process;
Process::State m_original_state { Process::Invalid }; Process::State m_original_state { Process::Invalid };