use new buildit OS_Lock

This commit is contained in:
jacob 2024-06-21 13:25:31 -05:00
parent 28cb519b7a
commit afea5ea512

52
build.c
View File

@ -73,27 +73,23 @@ struct StepList {
void AddStep(String name, T_TaskFunc *func, void *arg)
{
OS_MutexLockE(&sl->mutex);
{
Step *s = ArenaPush(&sl->arena, Step);
s->res_mutex = OS_MutexAlloc();
s->res_cv = OS_ConditionVariableAlloc();
s->name = name;
s->arg = arg;
SllQueuePush(sl->first, sl->last, s);
++sl->count;
T_AddTask(&sl->tq, func, s);
}
OS_MutexUnlockE(&sl->mutex);
OS_Lock lock = OS_MutexLockE(&sl->mutex);
Step *s = ArenaPush(&sl->arena, Step);
s->res_mutex = OS_MutexAlloc();
s->res_cv = OS_ConditionVariableAlloc();
s->name = name;
s->arg = arg;
SllQueuePush(sl->first, sl->last, s);
++sl->count;
T_AddTask(&sl->tq, func, s);
OS_MutexUnlock(&lock);
}
void AddSyncPoint(void)
{
OS_MutexLockE(&sl->mutex);
{
T_AddSyncPoint(&sl->tq);
}
OS_MutexUnlockE(&sl->mutex);
OS_Lock lock = OS_MutexLockE(&sl->mutex);
T_AddSyncPoint(&sl->tq);
OS_MutexUnlock(&lock);
}
void ExecuteSteps(void)
@ -126,21 +122,21 @@ void BuildStepSimpleCommand(void *arg_raw)
BuildStepSimpleCommandArg *arg = s->arg;
SH_CommandResult result = SH_RunCommandCaptureOutput(scratch.arena, arg->cmd, true);
OS_MutexLockE(&s->res_mutex);
{
OS_Lock res_lock = OS_MutexLockE(&s->res_mutex);
if (result.output.len > 0) {
OS_MutexLockE(&sl->mutex);
OS_Lock sl_lock = OS_MutexLockE(&sl->mutex);
{
s->res_output.text = ArenaPushArrayNoZero(&sl->arena, Byte, result.output.len);
}
OS_MutexUnlockE(&sl->mutex);
OS_MutexUnlock(&sl_lock);
s->res_output.len = result.output.len;
MemoryCopy(s->res_output.text, result.output.text, result.output.len);
}
s->res_status = result.error ? StepStatus_Failure : StepStatus_Success;
OS_ConditionVariableBroadcast(&s->res_cv);
OS_MutexUnlock(&res_lock);
}
OS_MutexUnlockE(&s->res_mutex);
ScratchEnd(scratch);
}
@ -158,21 +154,21 @@ void BuildStepMsvcCompileCommand(void *arg_raw)
D_ClearWrite(arg->output_depfile, depfile_data);
}
OS_MutexLockE(&s->res_mutex);
{
OS_Lock res_lock = OS_MutexLockE(&s->res_mutex);
if (result.output.len > 0) {
OS_MutexLockE(&sl->mutex);
OS_Lock sl_lock = OS_MutexLockE(&sl->mutex);
{
s->res_output.text = ArenaPushArrayNoZero(&sl->arena, Byte, result.output.len);
}
OS_MutexUnlockE(&sl->mutex);
OS_MutexUnlock(&sl_lock);
s->res_output.len = result.output.len;
MemoryCopy(s->res_output.text, result.output.text, result.output.len);
}
s->res_status = result.error ? StepStatus_Failure : StepStatus_Success;
OS_ConditionVariableBroadcast(&s->res_cv);
OS_MutexUnlock(&res_lock);
}
OS_MutexUnlockE(&s->res_mutex);
ScratchEnd(scratch);
}
@ -835,13 +831,13 @@ void OnBuild(StringList cli_args)
SH_PrintF(Lit("[%F/%F] %F\n"), FmtI64(step_i), FmtI64(step_count), FmtStr(s->name));
OS_MutexLockS(&s->res_mutex);
{
OS_Lock lock = OS_MutexLockS(&s->res_mutex);
while (s->res_status == StepStatus_None) {
OS_ConditionVariableWaitS(&s->res_cv, &s->res_mutex);
OS_ConditionVariableWait(&s->res_cv, &lock);
}
OS_MutexUnlock(&lock);
}
OS_MutexUnlockS(&s->res_mutex);
String output = s->res_output;
if (s->res_status != StepStatus_Success) {