|
DataMuseum.dkPresents historical artifacts from the history of: DKUUG/EUUG Conference tapes |
This is an automatic "excavation" of a thematic subset of
See our Wiki for more about DKUUG/EUUG Conference tapes Excavated with: AutoArchaeologist - Free & Open Source Software. |
top - metrics - downloadIndex: T a
Length: 9288 (0x2448) Types: TextFile Names: »activity.c«
└─⟦3d0c2be1b⟧ Bits:30001254 ISODE-5.0 Tape └─⟦eba4602b1⟧ »./isode-5.0.tar.Z« └─⟦d3ac74d73⟧ └─⟦this⟧ »isode-5.0/quipu/activity.c«
/* activity.c - */ #ifndef lint static char *rcsid = "$Header: /f/osi/quipu/RCS/activity.c,v 6.0 89/03/18 23:41:02 mrose Rel $"; #endif /* * $Header: /f/osi/quipu/RCS/activity.c,v 6.0 89/03/18 23:41:02 mrose Rel $ * * * $Log: activity.c,v $ * Revision 6.0 89/03/18 23:41:02 mrose * Release 5.0 * */ /* * NOTICE * * Acquisition, use, and distribution of this module and related * materials are subject to the restrictions of a license agreement. * Consult the Preface in the User's Manual for the full terms of * this agreement. * */ #include "quipu/util.h" #include "quipu/connection.h" extern LLog * log_dsap; struct activity *act_alloc() { struct activity *act_ret; act_ret = (struct activity *) calloc(1,sizeof(struct activity)); act_ret->act_cha = &(act_ret->act_req.dca_charg); act_ret->act_result = &(act_ret->act_resp.resp_res); act_ret->act_error = &(act_ret->act_resp.resp_err); return(act_ret); } struct activity *oper_alloc() { struct activity *oper_ret = act_alloc(); oper_ret->act_initiator = INITIATED_BY_THIS; return(oper_ret); } struct activity *task_alloc() { struct activity *task_ret = act_alloc(); task_ret->act_initiator = INITIATED_BY_THAT; return(task_ret); } act_free(act) struct activity *act; { response_free (&(act->act_resp)); if(act->act_initiator == INITIATED_BY_THAT) op_arg_free (&(act->act_req)); free((char *)act); } task_extract(task) struct activity *task; { struct activity *on; struct activity *tk; DLOG (log_dsap,LLOG_TRACE, ("task_extract()")); if(task == NULLACTIVITY) { LLOG (log_dsap,LLOG_FATAL,("Attempted to extract NULLACTIVITY!!")); return; } for(on = task->tk_operlist; on!=NULLACTIVITY; on = on->on_next_task) { oper_task_extract(on); if(on->act_conn == NULLCONN) act_free(on); } if(task->act_conn->cn_tasklist == task) { task->act_conn->cn_tasklist = task->act_conn->cn_tasklist->tk_next; } else { for(tk = task->act_conn->cn_tasklist; tk->tk_next != NULLACTIVITY; tk = tk->tk_next) { if(tk->tk_next == task) break; } if(tk->tk_next == NULLACTIVITY) { LLOG(log_dsap, LLOG_FATAL, ("Task memerr extract 1")); } else { tk->tk_next = task->tk_next; } } act_free(task); DLOG (log_dsap,LLOG_TRACE, ("task block freed")); } oper_extract(oper) struct activity *oper; { if(oper->act_conn != NULLCONN) oper_conn_extract(oper); if(oper->on_task != NULLACTIVITY) oper_task_extract(oper); act_free(oper); } oper_conn_extract(oper) struct activity *oper; { /* * Extract the operation activity block from the list held by its * connection. */ struct activity *on; if(oper == NULLACTIVITY) { LLOG (log_dsap,LLOG_FATAL, ("Cannot extract NULLOPER")); return; /* This is an implementation error */ } if(oper->act_conn == NULLCONN) return; /* This operation must have already been extracted for some reason. */ if(oper->act_conn->cn_operlist == oper) oper->act_conn->cn_operlist = oper->on_next_conn; else { for(on=oper->act_conn->cn_operlist; on->on_next_conn!=NULLACTIVITY; on=on->on_next_conn) { if(on->on_next_conn == oper) break; } if(on->on_next_conn == NULLACTIVITY) { LLOG(log_dsap, LLOG_FATAL, ("Task memerr extract 2")); } else { on->on_next_conn = oper->on_next_conn; } } if((oper->act_conn->cn_initiator == INITIATED_BY_THIS) && (oper->act_conn->cn_state == CN_STATE_INIT) && (oper->act_conn->cn_operlist == NULLACTIVITY)) { LLOG (log_dsap,LLOG_NOTICE, ("Extracting conn while extracting oper")); oper->act_conn->cn_state = CN_STATE_FAIL; } oper->act_conn = NULLCONN; /* Shows that this has been conn_extracted */ } oper_task_extract(oper) struct activity *oper; { /* * Extract this operation from the list held by its task. */ struct activity *on; if(oper == NULLACTIVITY) { LLOG (log_dsap,LLOG_FATAL, ("Cannot extract NULLOPER")); return; /* This is an implementation error */ } if(oper->on_task == NULLACTIVITY) return; /* Must have been extracted previously. */ if(oper->on_task->tk_operlist == oper) oper->on_task->tk_operlist = oper->on_next_task; else { for(on=oper->on_task->tk_operlist; on->on_next_task!=NULLACTIVITY; on=on->on_next_task) { if(on->on_next_task == oper) break; } if(on->on_next_task == NULLACTIVITY) { LLOG(log_dsap, LLOG_FATAL, ("Task memerr extract 3")); } else { on->on_next_task = oper->on_next_task; } } oper->on_task->act_class = ACTIVITY_COLLATE; oper->on_task = NULLACTIVITY; /* Shows that this has been task_extracted */ } task_log(task) struct activity *task; { struct activity * oper; DLOG (log_dsap,LLOG_NOTICE, ("Task [%x]", task)); act_log(task); if(task->tk_operlist != NULLACTIVITY) DLOG (log_dsap,LLOG_NOTICE, ("Task-Opers:")); for(oper=task->tk_operlist; oper != NULLACTIVITY; oper = oper->on_next_task) oper_log(oper); } oper_log(oper) struct activity * oper; { DLOG (log_dsap,LLOG_NOTICE, ("Oper [%x]", oper)); act_log(oper); } act_log(act) struct activity * act; { DLOG (log_dsap,LLOG_TRACE, (" activity: id = %d, class = %d, type = %d, prio = %d.", act->act_id, act->act_class, act->act_type, act->act_prio)); } op_arg_free (arg) struct ds_op_arg * arg; { /* free chain bits */ dn_free (arg->dca_charg.cha_originator); dn_free (arg->dca_charg.cha_target); if (arg->dca_charg.cha_domaininfo != NULLPE) pe_free (arg->dca_charg.cha_domaininfo); if(arg->dca_charg.cha_trace != NULLTRACEINFO) trace_info_free (arg->dca_charg.cha_trace); if (arg->dca_charg.cha_timelimit != (struct UTCTime *)NULL) free ((char*)arg->dca_charg.cha_timelimit); /* free argument structure */ switch (arg->dca_dsarg.arg_type) { case OP_READ: ca_free (&arg->dca_dsarg.arg_rd.rda_common); dn_free (arg->dca_dsarg.arg_rd.rda_object); as_free (arg->dca_dsarg.arg_rd.rda_eis.eis_select); break; case OP_COMPARE: ca_free (&arg->dca_dsarg.arg_cm.cma_common); dn_free (arg->dca_dsarg.arg_cm.cma_object); AttrT_free (arg->dca_dsarg.arg_cm.cma_purported.ava_type); AttrV_free (arg->dca_dsarg.arg_cm.cma_purported.ava_value); break; case OP_ABANDON: break; case OP_LIST: ca_free (&arg->dca_dsarg.arg_ls.lsa_common); dn_free (arg->dca_dsarg.arg_ls.lsa_object); break; case OP_SEARCH: ca_free (&arg->dca_dsarg.arg_sr.sra_common); dn_free (arg->dca_dsarg.arg_sr.sra_baseobject); as_free (arg->dca_dsarg.arg_sr.sra_eis.eis_select); filter_free (arg->dca_dsarg.arg_sr.sra_filter); break; case OP_ADDENTRY: ca_free (&arg->dca_dsarg.arg_ad.ada_common); dn_free (arg->dca_dsarg.arg_ad.ada_object); as_free (arg->dca_dsarg.arg_ad.ada_entry); break; case OP_REMOVEENTRY: ca_free (&arg->dca_dsarg.arg_rm.rma_common); dn_free (arg->dca_dsarg.arg_rm.rma_object); break; case OP_MODIFYENTRY: ca_free (&arg->dca_dsarg.arg_me.mea_common); dn_free (arg->dca_dsarg.arg_me.mea_object); ems_free (arg->dca_dsarg.arg_me.mea_changes); break; case OP_MODIFYRDN: ca_free (&arg->dca_dsarg.arg_mr.mra_common); dn_free (arg->dca_dsarg.arg_mr.mra_object); rdn_free (arg->dca_dsarg.arg_mr.mra_newrdn); break; case OP_GETEDB: dn_free (arg->dca_dsarg.arg_ge.ga_entry); break; default: break; } } trace_info_free (arg) struct trace_info * arg; { if (arg == NULLTRACEINFO) return; dn_free (arg->ti_target); dn_free (arg->ti_dsa); trace_info_free (arg->ti_next); free( (char *) arg); } ca_free (arg) CommonArgs * arg; { dn_free (arg->ca_requestor); extension_free (arg->ca_extensions); } extension_free (arg) struct extension * arg; { for (; arg != NULLEXT; arg=arg->ext_next) { if (arg->ext_item != NULLPE) pe_free (arg->ext_item); free ((char *) arg); } } response_free (arg) struct response * arg; { if (arg->ret_type == RET_TYPE_ERR) ds_error_free (&arg->resp_err); else op_res_free (&arg->resp_res); crefs_free (arg->resp_ref); } op_res_free (arg) struct ds_op_res * arg; { /* free chain bits */ if (arg->dcr_chres.chr_domaininfo != NULLPE) pe_free (arg->dcr_chres.chr_domaininfo); cross_refs_free (arg->dcr_chres.chr_crossrefs); /* free argument structure */ switch (arg->dcr_dsres.result_type) { case OP_READ: /* dn_free (&arg->dcr_dsres.res_rd.rdr_common.cr_requestor); */ entryinfo_comp_free (&arg->dcr_dsres.res_rd.rdr_entry,1); break; case OP_COMPARE: /* dn_free (&arg->dcr_dsres.res_cm.cmr_common.cr_requestor); */ dn_free (arg->dcr_dsres.res_cm.cmr_object); break; case OP_LIST: /* dn_free (&arg->dcr_dsres.res_ls.lsr_common.cr_requestor); */ dn_free (arg->dcr_dsres.res_ls.lsr_object); subords_free (arg->dcr_dsres.res_ls.lsr_subordinates); crefs_free (arg->dcr_dsres.res_ls.lsr_cr); break; case OP_SEARCH: search_result_free(&(arg->dcr_dsres.res_sr)); break; case OP_GETEDB: break; /* don't free EDB */ default: break; } } cross_refs_free (arg) struct cross_ref * arg; { if (arg == NULLXREF) return; dn_free (arg->xref_dn); aps_free (arg->xref_ap); cross_refs_free (arg->xref_next); free ((char *)arg); }