|
|
1.1 root 1: /* oper_act.c - routines to handle operation activity blocks */
2:
3: #ifndef lint
4: static char *rcsid = "$Header: /f/osi/quipu/RCS/oper_act.c,v 7.1 90/07/09 14:46:21 mrose Exp $";
5: #endif
6:
7: /*
8: * $Header: /f/osi/quipu/RCS/oper_act.c,v 7.1 90/07/09 14:46:21 mrose Exp $
9: *
10: *
11: * $Log: oper_act.c,v $
12: * Revision 7.1 90/07/09 14:46:21 mrose
13: * sync
14: *
15: * Revision 7.0 89/11/23 22:17:50 mrose
16: * Release 6.0
17: *
18: */
19:
20: /*
21: * NOTICE
22: *
23: * Acquisition, use, and distribution of this module and related
24: * materials are subject to the restrictions of a license agreement.
25: * Consult the Preface in the User's Manual for the full terms of
26: * this agreement.
27: *
28: */
29:
30:
31: #include "quipu/util.h"
32: #include "quipu/connection.h"
33:
34: extern LLog * log_dsap;
35:
36: struct oper_act *oper_alloc()
37: {
38: struct oper_act * on_ret;
39:
40: on_ret = (struct oper_act *) calloc(1,sizeof(struct oper_act));
41:
42: on_ret->on_arg = &(on_ret->on_req);
43:
44: on_ret->on_relay = TRUE; /* Relay unless reason not to. */
45:
46: return(on_ret);
47: }
48:
49: oper_free(on)
50: struct oper_act *on;
51: {
52: DLOG(log_dsap, LLOG_TRACE, ("oper_free()"));
53: on->on_state = -1;
54:
55: if (on->on_req.dca_charg.cha_trace != (struct trace_info *)NULL)
56: if (on->on_type == ON_TYPE_SUBTASK)
57: ch_arg_free (&on->on_req);
58: else
59: op_arg_free (&on->on_req.dca_dsarg);
60:
61: free((char *)on);
62: }
63:
64: oper_extract(on)
65: struct oper_act * on;
66: {
67: DLOG(log_dsap, LLOG_TRACE, ("oper_extract()"));
68:
69: if(on->on_conn != NULLCONN)
70: oper_conn_extract(on);
71:
72: if(on->on_task != NULLTASK)
73: oper_task_extract(on);
74:
75: oper_free(on);
76: }
77:
78: oper_conn_extract(on)
79: struct oper_act * on;
80: {
81: /*
82: * Extract the operation activity block from the list held by its
83: * connection.
84: */
85: struct oper_act * on_tmp;
86: struct oper_act **on_p;
87:
88: DLOG(log_dsap, LLOG_TRACE, ("oper_conn_extract()"));
89:
90: if(on == NULLOPER)
91: {
92: LLOG (log_dsap,LLOG_FATAL, ("oper_conn_extract: Cannot extract NULLOPER"));
93: return;
94: /* This is an implementation error */
95: }
96:
97: if(on->on_conn == NULLCONN)
98: {
99: LLOG (log_dsap,LLOG_EXCEPTIONS, ("oper_conn_extract: already extracted"));
100: /* This operation must have already been extracted for some reason. */
101: return;
102: }
103:
104: on_p = &(on->on_conn->cn_operlist);
105: for(on_tmp=(*on_p); on_tmp!=NULLOPER; on_tmp=on_tmp->on_next_conn)
106: {
107: if(on_tmp == on)
108: break;
109:
110: on_p = &(on_tmp->on_next_conn);
111: }
112: if(on_tmp == NULLOPER)
113: {
114: LLOG(log_dsap, LLOG_EXCEPTIONS, ("oper_conn_extract: oper not on connections list!"));
115: }
116: else
117: {
118: (*on_p) = on_tmp->on_next_conn;
119: }
120:
121: on->on_conn = NULLCONN; /* Shows that this has been conn_extracted */
122: }
123:
124: oper_task_extract(on)
125: struct oper_act * on;
126: {
127: /*
128: * Extract this operation from the list held by its task.
129: */
130: struct oper_act * on_tmp;
131: struct oper_act **on_p;
132:
133: DLOG(log_dsap, LLOG_TRACE, ("oper_task_extract()"));
134:
135: if(on == NULLOPER)
136: {
137: LLOG (log_dsap,LLOG_FATAL, ("oper_task_extract: Cannot extract NULLOPER"));
138: return;
139: /* This is an implementation error */
140: }
141:
142: if(on->on_task == NULLTASK)
143: {
144: /* Must have been extracted previously. */
145: if (on->on_state != ON_ABANDONED)
146: LLOG (log_dsap,LLOG_EXCEPTIONS, ("oper_task_extract: oper has no task"));
147: return;
148: }
149:
150: on_p = &(on->on_task->tk_operlist);
151: for(on_tmp=(*on_p); on_tmp!=NULLOPER; on_tmp=on_tmp->on_next_task)
152: {
153: if(on_tmp == on)
154: break;
155:
156: on_p = &(on_tmp->on_next_task);
157: }
158: if(on_tmp == NULLOPER)
159: {
160: LLOG(log_dsap, LLOG_EXCEPTIONS, ("Oper not on tasks list"));
161: }
162: else
163: {
164: (*on_p) = on_tmp->on_next_task;
165: }
166:
167: if (on->on_dsas != NULL_DI_BLOCK)
168: di_desist (on->on_dsas);
169:
170: on->on_dsas = NULL_DI_BLOCK;
171:
172: on->on_task = NULLTASK; /* Shows that this has been task_extracted */
173: }
174:
175: oper_log(on)
176: struct oper_act * on;
177: {
178: DLOG (log_dsap,LLOG_DEBUG, ("Oper id = %d, state = %d, type = %d",
179: on->on_id, on->on_state, on->on_type));
180: }
181:
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.