2 * Copyright 2000, International Business Machines Corporation and others.
5 * This software has been released under the terms of the IBM Public
6 * License. For details, see the LICENSE file in the top-level source
7 * directory or online at http://www.openafs.org/dl/license10.html
10 #include <afsconfig.h>
11 #include <afs/param.h>
16 #include <afs/com_err.h>
17 #include <afs/bubasics.h>
20 #include "error_macros.h"
21 #include "bucoord_internal.h"
22 #include "bucoord_prototypes.h"
24 extern dlqlinkT statusHead; /* chain of status blocks */
25 extern struct Lock statusQueueLock; /* access control for status chain */
26 extern struct Lock cmdLineLock; /* lock on the cmdLine */
28 /* task status management
30 * These routines are common the backup coordinator and tape coordinator
37 Lock_Init(&statusQueueLock);
38 Lock_Init(&cmdLineLock);
46 ObtainWriteLock(&statusQueueLock);
52 ReleaseWriteLock(&statusQueueLock);
58 ObtainWriteLock(&cmdLineLock);
63 ReleaseWriteLock(&cmdLineLock);
69 clearStatus(afs_uint32 taskId, afs_uint32 flags)
73 ObtainWriteLock(&statusQueueLock);
74 ptr = findStatus(taskId);
76 ReleaseWriteLock(&statusQueueLock);
81 ReleaseWriteLock(&statusQueueLock);
85 createStatusNode(void)
89 ptr = (statusP) malloc(sizeof(*ptr));
93 memset(ptr, 0, sizeof(*ptr));
95 /* link it onto the chain of status entries */
96 ObtainWriteLock(&statusQueueLock);
97 dlqLinkb(&statusHead, (dlqlinkP) ptr);
98 ptr->flags = STARTING;
99 ReleaseWriteLock(&statusQueueLock);
105 deleteStatusNode(statusP ptr)
107 ObtainWriteLock(&statusQueueLock);
108 dlqUnlink((dlqlinkP) ptr);
113 ReleaseWriteLock(&statusQueueLock);
117 findStatus(afs_uint32 taskId)
122 dlqPtr = statusHead.dlq_next;
123 while (dlqPtr != &statusHead) {
124 if (((statusP) dlqPtr)->taskId == taskId) {
125 ptr = (statusP) dlqPtr;
128 dlqPtr = dlqPtr->dlq_next;
135 setStatus(afs_uint32 taskId, afs_uint32 flags)
139 ObtainWriteLock(&statusQueueLock);
140 ptr = findStatus(taskId);
142 ReleaseWriteLock(&statusQueueLock);
147 ReleaseWriteLock(&statusQueueLock);