Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/bareos/bareos.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlaa Eddine Elamri <alaeddine.elamri@bareos.com>2022-10-28 16:54:16 +0300
committerAndreas Rogge <andreas.rogge@bareos.com>2022-11-07 19:16:30 +0300
commit608f067fa68047cdb1cbe9cb9dcf5741bcb43f6b (patch)
tree327dbcfb0c2fda7b2d6826b993e0c6b2d56020d1
parentc94a9a9ff09cc7c398e3621f0314573c9fc44ef6 (diff)
use compare exchange before changing status
-rw-r--r--core/src/lib/jcr.cc10
1 files changed, 3 insertions, 7 deletions
diff --git a/core/src/lib/jcr.cc b/core/src/lib/jcr.cc
index 71447eaa7..cd983b894 100644
--- a/core/src/lib/jcr.cc
+++ b/core/src/lib/jcr.cc
@@ -759,13 +759,9 @@ void JobControlRecord::setJobStarted()
void JobControlRecord::setJobStatusWithPriorityCheck(int newJobStatus)
{
int priority;
- int old_priority = 0;
- int oldJobStatus = ' ';
+ int oldJobStatus = JobStatus;
+ int old_priority = GetStatusPriority(oldJobStatus);
- if (JobStatus) {
- oldJobStatus = JobStatus;
- old_priority = GetStatusPriority(oldJobStatus);
- }
priority = GetStatusPriority(newJobStatus);
Dmsg2(800, "setJobStatus(%s, %c)\n", Job, newJobStatus);
@@ -789,7 +785,7 @@ void JobControlRecord::setJobStatusWithPriorityCheck(int newJobStatus)
if (priority > old_priority || (priority == 0 && old_priority == 0)) {
Dmsg4(800, "Set new stat. old: %c,%d new: %c,%d\n", oldJobStatus,
old_priority, newJobStatus, priority);
- JobStatus = newJobStatus; /* replace with new status */
+ JobStatus.compare_exchange_strong(oldJobStatus, newJobStatus);
}
if (oldJobStatus != JobStatus) {