BarryServer : Git

All the code for all my projects
// BarryServer : Git / Nucleus / commit / e8e484f3952a9a3b7df1c3f5763a794a51ea6966 / task / queue.c

// Related

Nucleus

Barry Object locking e8e484f (3 years, 3 months ago)
diff --git a/task/queue.c b/task/queue.c
index 670c26c..071a1fe 100644
--- a/task/queue.c
+++ b/task/queue.c
@@ -38,18 +38,22 @@ task_queue_delete(Object *obj)
 void
 add_to_queue(TaskQueue *queue, Task *task)
 {
+	lock(queue);
 	if (!queue->start)
 		queue->start = get(task);
 	else
 		queue->end->next = get(task);
 	queue->end = task;
 	task->next = NULL;
+	unlock(queue);
 }
 
 /* Remove a Task from a Task Queue */
 void
 remove_from_queue(TaskQueue *queue, Task *task)
 {
+	lock(queue);
+
 	/* Start of queue */
 	if (queue->start == task) {
 		queue->start = task->next;
@@ -61,8 +65,10 @@ remove_from_queue(TaskQueue *queue, Task *task)
 	for (prev = queue->start; prev->next; prev = prev->next)
 		if (prev->next == task)
 			break;
-	if (!prev->next)
+	if (!prev->next) {
+		unlock(queue);
 		return;
+	}
 
 	prev->next = task->next;
 
@@ -72,13 +78,17 @@ found:
 
 	task->next = NULL;
 	put(task);
+
+	unlock(queue);
 }
 
 /* Remove the first Task from a Task Queue */
 Task *
 pop_from_queue(TaskQueue *queue)
 {
+	lock(queue);
 	Task *head = get(queue->start);
 	remove_from_queue(queue, queue->start);
+	unlock(queue);
 	return head;
 }