mirror of
https://github.com/RGBCube/serenity
synced 2025-05-28 18:35:09 +00:00
Fix some issues uncovered by the spawn stress test.
This commit is contained in:
parent
f6179ad9f9
commit
3f3535213b
5 changed files with 9 additions and 7 deletions
|
@ -164,6 +164,7 @@ public:
|
||||||
|
|
||||||
void unchecked_append(T&& value)
|
void unchecked_append(T&& value)
|
||||||
{
|
{
|
||||||
|
ASSERT((size() + 1) <= capacity());
|
||||||
new (m_impl->slot(m_impl->m_size)) T(move(value));
|
new (m_impl->slot(m_impl->m_size)) T(move(value));
|
||||||
++m_impl->m_size;
|
++m_impl->m_size;
|
||||||
}
|
}
|
||||||
|
|
|
@ -189,7 +189,8 @@ void ProcFS::remove_process(Process& process)
|
||||||
InterruptDisabler disabler;
|
InterruptDisabler disabler;
|
||||||
auto pid = process.pid();
|
auto pid = process.pid();
|
||||||
auto it = m_pid2inode.find(pid);
|
auto it = m_pid2inode.find(pid);
|
||||||
ASSERT(it != m_pid2inode.end());
|
if (it == m_pid2inode.end())
|
||||||
|
return;
|
||||||
bool success = remove_file((*it).value);
|
bool success = remove_file((*it).value);
|
||||||
ASSERT(success);
|
ASSERT(success);
|
||||||
m_pid2inode.remove(pid);
|
m_pid2inode.remove(pid);
|
||||||
|
|
|
@ -690,7 +690,8 @@ Process::~Process()
|
||||||
ProcFS::the().remove_process(*this);
|
ProcFS::the().remove_process(*this);
|
||||||
system.nprocess--;
|
system.nprocess--;
|
||||||
|
|
||||||
gdt_free_entry(selector());
|
if (selector())
|
||||||
|
gdt_free_entry(selector());
|
||||||
|
|
||||||
if (m_kernelStack) {
|
if (m_kernelStack) {
|
||||||
kfree(m_kernelStack);
|
kfree(m_kernelStack);
|
||||||
|
|
|
@ -34,7 +34,7 @@ word gdt_alloc_entry()
|
||||||
|
|
||||||
void gdt_free_entry(word entry)
|
void gdt_free_entry(word entry)
|
||||||
{
|
{
|
||||||
s_gdt_freelist->append(entry);
|
s_gdt_freelist->unchecked_append(entry);
|
||||||
}
|
}
|
||||||
|
|
||||||
extern "C" void handle_irq();
|
extern "C" void handle_irq();
|
||||||
|
|
|
@ -36,14 +36,13 @@ Keyboard* keyboard;
|
||||||
static void spawn_stress() NORETURN;
|
static void spawn_stress() NORETURN;
|
||||||
static void spawn_stress()
|
static void spawn_stress()
|
||||||
{
|
{
|
||||||
dword lastAlloc = sum_alloc;
|
dword last_sum_alloc = sum_alloc;
|
||||||
|
|
||||||
for (unsigned i = 0; i < 10000; ++i) {
|
for (unsigned i = 0; i < 10000; ++i) {
|
||||||
int error;
|
int error;
|
||||||
Process::create_user_process("/bin/true", (uid_t)100, (gid_t)100, (pid_t)0, error, Vector<String>(), Vector<String>(), tty0);
|
Process::create_user_process("/bin/true", (uid_t)100, (gid_t)100, (pid_t)0, error, Vector<String>(), Vector<String>(), tty0);
|
||||||
kprintf("malloc stats: alloc:%u free:%u eternal:%u ", sum_alloc, sum_free, kmalloc_sum_eternal);
|
dbgprintf("malloc stats: alloc:%u free:%u eternal:%u !delta:%u\n", sum_alloc, sum_free, kmalloc_sum_eternal, sum_alloc - last_sum_alloc);
|
||||||
kprintf("delta:%u\n", sum_alloc - lastAlloc);
|
last_sum_alloc = sum_alloc;
|
||||||
lastAlloc = sum_alloc;
|
|
||||||
sleep(60);
|
sleep(60);
|
||||||
}
|
}
|
||||||
for (;;) {
|
for (;;) {
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue