1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79
|
/****************************************************************
* *
* Copyright 2001, 2004 Sanchez Computer Associates, Inc. *
* *
* This source code contains the intellectual property *
* of its copyright holder(s), and is made available *
* under a license. If you do not know the terms of *
* the license, please stop and do not read further. *
* *
****************************************************************/
#include "mdef.h"
#include "cmidef.h"
#include "hashtab_mname.h" /* needed for cmmdef.h */
#include "cmmdef.h"
#include "mlkdef.h"
#include "gvcmz.h"
#include "cmi.h"
#include "iosp.h"
GBLDEF unsigned char cmlk_num;
void gvcmz_sndlkremove(struct CLB *lnk, unsigned char oper, unsigned char cancel)
{
uint4 status,count;
unsigned char *ptr;
mlk_pvtblk *temp,*temp1;
error_def(ERR_BADSRVRNETMSG);
ptr = lnk->mbf;
*ptr++ = cancel;
*ptr++ = oper;
*ptr++ = cmlk_num;
lnk->cbl = S_HDRSIZE + S_LAFLAGSIZE + 1;
if (cancel == CMMS_L_LKDELETE)
{
gvcmz_lksublist(lnk);
temp = ((link_info*)(lnk->usr))->netlocks;
while (temp)
{
temp1 = temp->next;
free(temp);
temp = temp1;
}
((link_info*)(lnk->usr))->netlocks = 0;
((link_info*)(lnk->usr))->lck_info &= ~REQUEST_PENDING;
}
status = cmi_write(lnk);
if (CMI_ERROR(status))
{
((link_info *)(lnk->usr))->neterr = TRUE;
gvcmz_error(cancel, status);
return;
}
status = cmi_read(lnk);
if (CMI_ERROR(status))
{
((link_info *)(lnk->usr))->neterr = TRUE;
gvcmz_error(cancel, status);
return;
}
if (cancel == CMMS_L_LKCANCEL && (*(lnk->mbf) == CMMS_M_LKGRANTED || *(lnk->mbf) == CMMS_M_LKSUSPENDED))
{ /* because a LKCANCEL can be sent on an interrupt, allow for a message underway */
status = cmi_read(lnk);
if (CMI_ERROR(status))
{
((link_info *)(lnk->usr))->neterr = TRUE;
gvcmz_error(cancel, status);
return;
}
}
if (*(lnk->mbf) != CMMS_M_LKDELETED)
{
if (*(lnk->mbf) != CMMS_E_ERROR)
rts_error(VARLSTCNT(1) ERR_BADSRVRNETMSG);
gvcmz_errmsg(lnk,FALSE);
}
}
|