|
|
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.