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>
18 #include <afs/com_err.h>
19 #include <afs/bubasics.h>
22 #include "error_macros.h"
23 #include "bucoord_internal.h"
24 #include "bucoord_prototypes.h"
26 extern dlqlinkT statusHead
; /* chain of status blocks */
27 extern struct Lock statusQueueLock
; /* access control for status chain */
28 extern struct Lock cmdLineLock
; /* lock on the cmdLine */
30 /* task status management
32 * These routines are common the backup coordinator and tape coordinator
39 Lock_Init(&statusQueueLock
);
40 Lock_Init(&cmdLineLock
);
48 ObtainWriteLock(&statusQueueLock
);
54 ReleaseWriteLock(&statusQueueLock
);
60 ObtainWriteLock(&cmdLineLock
);
65 ReleaseWriteLock(&cmdLineLock
);
71 clearStatus(afs_uint32 taskId
, afs_uint32 flags
)
75 ObtainWriteLock(&statusQueueLock
);
76 ptr
= findStatus(taskId
);
78 ReleaseWriteLock(&statusQueueLock
);
83 ReleaseWriteLock(&statusQueueLock
);
87 createStatusNode(void)
91 ptr
= calloc(1, sizeof(*ptr
));
96 /* link it onto the chain of status entries */
97 ObtainWriteLock(&statusQueueLock
);
98 dlqLinkb(&statusHead
, (dlqlinkP
) ptr
);
99 ptr
->flags
= STARTING
;
100 ReleaseWriteLock(&statusQueueLock
);
106 deleteStatusNode(statusP ptr
)
108 ObtainWriteLock(&statusQueueLock
);
109 dlqUnlink((dlqlinkP
) ptr
);
114 ReleaseWriteLock(&statusQueueLock
);
118 findStatus(afs_uint32 taskId
)
123 dlqPtr
= statusHead
.dlq_next
;
124 while (dlqPtr
!= &statusHead
) {
125 if (((statusP
) dlqPtr
)->taskId
== taskId
) {
126 ptr
= (statusP
) dlqPtr
;
129 dlqPtr
= dlqPtr
->dlq_next
;
136 setStatus(afs_uint32 taskId
, afs_uint32 flags
)
140 ObtainWriteLock(&statusQueueLock
);
141 ptr
= findStatus(taskId
);
143 ReleaseWriteLock(&statusQueueLock
);
148 ReleaseWriteLock(&statusQueueLock
);