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 = calloc(1, sizeof(*ptr));
94 /* link it onto the chain of status entries */
95 ObtainWriteLock(&statusQueueLock);
96 dlqLinkb(&statusHead, (dlqlinkP) ptr);
97 ptr->flags = STARTING;
98 ReleaseWriteLock(&statusQueueLock);
104 deleteStatusNode(statusP ptr)
106 ObtainWriteLock(&statusQueueLock);
107 dlqUnlink((dlqlinkP) ptr);
112 ReleaseWriteLock(&statusQueueLock);
116 findStatus(afs_uint32 taskId)
121 dlqPtr = statusHead.dlq_next;
122 while (dlqPtr != &statusHead) {
123 if (((statusP) dlqPtr)->taskId == taskId) {
124 ptr = (statusP) dlqPtr;
127 dlqPtr = dlqPtr->dlq_next;
134 setStatus(afs_uint32 taskId, afs_uint32 flags)
138 ObtainWriteLock(&statusQueueLock);
139 ptr = findStatus(taskId);
141 ReleaseWriteLock(&statusQueueLock);
146 ReleaseWriteLock(&statusQueueLock);