mirror of
https://github.com/RGBCube/serenity
synced 2025-07-27 06:07:34 +00:00
Kernel: Make Process's m_promises & m_execpromises fields atomic
This is essentially free on x86 and allows us to not hold the big process lock just to check the required promises for a syscall.
This commit is contained in:
parent
868be680c2
commit
c3f668a758
4 changed files with 12 additions and 12 deletions
|
@ -639,8 +639,8 @@ KResult Process::do_exec(NonnullRefPtr<FileDescription> main_program_description
|
|||
|
||||
{
|
||||
ProtectedDataMutationScope scope { *this };
|
||||
m_promises = m_execpromises;
|
||||
m_has_promises = m_has_execpromises;
|
||||
m_promises = m_execpromises.load();
|
||||
m_has_promises = m_has_execpromises.load();
|
||||
|
||||
m_execpromises = 0;
|
||||
m_has_execpromises = false;
|
||||
|
|
|
@ -30,10 +30,10 @@ KResultOr<FlatPtr> Process::sys$fork(RegisterState& regs)
|
|||
|
||||
{
|
||||
ProtectedDataMutationScope scope { *child };
|
||||
child->m_promises = m_promises;
|
||||
child->m_execpromises = m_execpromises;
|
||||
child->m_has_promises = m_has_promises;
|
||||
child->m_has_execpromises = m_has_execpromises;
|
||||
child->m_promises = m_promises.load();
|
||||
child->m_execpromises = m_execpromises.load();
|
||||
child->m_has_promises = m_has_promises.load();
|
||||
child->m_has_execpromises = m_has_execpromises.load();
|
||||
child->m_sid = m_sid;
|
||||
child->m_extra_gids = m_extra_gids;
|
||||
child->m_umask = m_umask;
|
||||
|
|
|
@ -74,13 +74,13 @@ KResultOr<FlatPtr> Process::sys$pledge(Userspace<const Syscall::SC_pledge_params
|
|||
// leave the caller in an unexpected state.
|
||||
|
||||
if (promises) {
|
||||
m_has_promises = true;
|
||||
m_promises = new_promises;
|
||||
m_has_promises = true;
|
||||
}
|
||||
|
||||
if (execpromises) {
|
||||
m_has_execpromises = true;
|
||||
m_execpromises = new_execpromises;
|
||||
m_has_execpromises = true;
|
||||
}
|
||||
|
||||
return 0;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue