|
|
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 d
Length: 2998 (0xbb6)
Types: TextFile
Names: »ds_abandon.c«
└─⟦2d1937cfd⟧ Bits:30007241 EUUGD22: P.P 5.0
└─⟦35176feda⟧ »EurOpenD22/isode/isode-6.tar.Z«
└─⟦de7628f85⟧
└─⟦this⟧ »isode-6.0/quipu/ds_abandon.c«
/* ds_abandon.c - */
#ifndef lint
static char *rcsid = "$Header: /f/osi/quipu/RCS/ds_abandon.c,v 7.0 89/11/23 22:17:03 mrose Rel $";
#endif
/*
* $Header: /f/osi/quipu/RCS/ds_abandon.c,v 7.0 89/11/23 22:17:03 mrose Rel $
*
*
* $Log: ds_abandon.c,v $
* Revision 7.0 89/11/23 22:17:03 mrose
* Release 6.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/attrvalue.h"
#include "quipu/abandon.h"
#include "quipu/dsp.h"
#include "quipu/ds_error.h"
#include "quipu/connection.h"
extern LLog * log_dsap;
/* ARGSUSED */
do_ds_abandon (arg, error)
struct ds_abandon_arg *arg;
struct DSError *error;
{
DLOG (log_dsap,LLOG_TRACE,("ds_abandon"));
error->dse_type = DSE_ABANDON_FAILED;
error->ERR_ABANDON_FAIL.DSE_ab_problem = DSE_AB_CANNOTABANDON;
error->ERR_ABANDON_FAIL.DSE_ab_invokeid = 0;
return (NOTOK);
}
perform_abandon(tk)
struct task_act * tk;
{
struct task_act * tk_tmp;
struct task_act **tk_p;
int ab_id = tk->tk_req.dca_dsarg.arg_ab.aba_invokeid;
struct DSError * err = &(tk->tk_resp.resp_err);
DLOG(log_dsap, LLOG_TRACE, ("perform_abandon"));
tk_p = &(tk->tk_conn->cn_tasklist);
for(tk_tmp = (*tk_p); tk_tmp!=NULLTASK; tk_tmp=tk_tmp->tk_next)
{
if(tk_tmp->tk_id == ab_id)
break;
tk_p = &(tk_tmp->tk_next);
}
if(tk_tmp == NULLTASK)
{
LLOG(log_dsap, LLOG_NOTICE, ("perform_abandon - cannot find task to abandon"));
err->dse_type = DSE_ABANDON_FAILED;
err->ERR_ABANDON_FAIL.DSE_ab_problem = DSE_AB_NOSUCHOPERATION;
err->ERR_ABANDON_FAIL.DSE_ab_invokeid = ab_id;
return(NOTOK);
}
else
{
DLOG(log_dsap, LLOG_DEBUG, ("perform_abandon - found task to abandon"));
/* Slice out task to abandon */
(*tk_p) = tk_tmp->tk_next;
if(task_abandon(tk_tmp) != OK)
{
DLOG(log_dsap, LLOG_DEBUG, ("perform_abandon - task_abandon NOTOK"));
err->dse_type = DSE_ABANDON_FAILED;
err->ERR_ABANDON_FAIL.DSE_ab_problem = DSE_AB_CANNOTABANDON;
err->ERR_ABANDON_FAIL.DSE_ab_invokeid = ab_id;
return(NOTOK);
}
else
{
DLOG(log_dsap, LLOG_DEBUG, ("perform_abandon - task_abandon OK"));
tk->tk_result = &(tk->tk_resp.resp_res);
tk->tk_result->dcr_dsres.result_type = OP_ABANDON;
return(OK);
}
}
}
task_abandon(tk)
struct task_act * tk;
{
struct oper_act * on;
DLOG(log_dsap, LLOG_TRACE, ("task_abandon"));
for(on = tk->tk_operlist; on != NULLOPER; on = on->on_next_task)
{
on->on_state = ON_ABANDONED;
on->on_task = NULLTASK;
}
tk->tk_type = ACT_TYPE_RESP;
tk->tk_resp.resp_type = RESP_TYPE_RET;
tk->tk_resp.ret_type = RET_TYPE_ERR;
tk->tk_resp.resp_err.dse_type = DSE_ABANDONED;
task_error(tk);
return(OK);
}