Browse Source

Lock on JudgeState::updateRelatedInfo

master
Menci 7 years ago
parent
commit
15e66065cd
  1. 40
      models/judge_state.js

40
models/judge_state.js

@ -173,24 +173,28 @@ class JudgeState extends Model {
}
async updateRelatedInfo(newSubmission) {
if (this.type === 0) {
if (newSubmission) {
await this.loadRelationships();
await this.user.refreshSubmitInfo();
this.problem.submit_num++;
await this.user.save();
await this.problem.save();
} else if (this.status === 'Accepted') {
await this.loadRelationships();
await this.user.refreshSubmitInfo();
this.problem.ac_num++;
await this.user.save();
await this.problem.save();
}
} else if (this.type === 1) {
let contest = await Contest.fromID(this.type_info);
await contest.newSubmission(this);
}
await syzoj.utils.lock(['JudgeState::updateRelatedInfo', 'problem', this.problem_id], async () => {
await syzoj.utils.lock(['JudgeState::updateRelatedInfo', 'user', this.user_id], async () => {
if (this.type === 0) {
if (newSubmission) {
await this.loadRelationships();
await this.user.refreshSubmitInfo();
this.problem.submit_num++;
await this.user.save();
await this.problem.save();
} else if (this.status === 'Accepted') {
await this.loadRelationships();
await this.user.refreshSubmitInfo();
this.problem.ac_num++;
await this.user.save();
await this.problem.save();
}
} else if (this.type === 1) {
let contest = await Contest.fromID(this.type_info);
await contest.newSubmission(this);
}
});
});
}
async rejudge() {

Loading…
Cancel
Save