replace lstLib with dllEpicsLib
This commit is contained in:
@@ -31,18 +31,20 @@
|
||||
* -----------------
|
||||
* .01 12-12-91 mrk moved from dbScan.c to callback.c
|
||||
* .02 04-23-92 jba Fixed test on priority
|
||||
* .03 06-28-93 mrk In callbackRequest replaced errMessage by logMsg
|
||||
*/
|
||||
|
||||
#include <vxWorks.h>
|
||||
#include <stdlib.h>
|
||||
#include <types.h>
|
||||
#include <semLib.h>
|
||||
#include <rngLib.h>
|
||||
#include <lstLib.h>
|
||||
#include <logLib.h>
|
||||
#include <intLib.h>
|
||||
|
||||
#include <dbDefs.h>
|
||||
#include <callback.h>
|
||||
#include <taskwd.h>
|
||||
#include <errMdef.h>
|
||||
#include <task_params.h>
|
||||
|
||||
#define QUEUESIZE 1000
|
||||
@@ -52,8 +54,8 @@ static int callbackTaskId[NUM_CALLBACK_PRIORITIES];
|
||||
volatile int callbackRestart=FALSE;
|
||||
|
||||
/* forward references */
|
||||
static void wdCallback(long); /*callback from taskwd*/
|
||||
static void start(); /*start or restart a callbackTask*/
|
||||
static void wdCallback(long ind); /*callback from taskwd*/
|
||||
static void start(int ind); /*start or restart a callbackTask*/
|
||||
|
||||
/*public routines */
|
||||
long callbackInit()
|
||||
@@ -76,10 +78,8 @@ void callbackRequest(CALLBACK *pcallback)
|
||||
static int status;
|
||||
|
||||
if(priority<0 || priority>=(NUM_CALLBACK_PRIORITIES)) {
|
||||
char msg[80];
|
||||
|
||||
sprintf(msg,"callbackRequest called with invalid priority=%d",priority);
|
||||
errMessage(-1,msg);
|
||||
logMsg("callbackRequest called with invalid priority\n",0,0,0,0,0,0);
|
||||
return;
|
||||
}
|
||||
lockKey = intLock();
|
||||
@@ -89,7 +89,7 @@ void callbackRequest(CALLBACK *pcallback)
|
||||
if((status=semGive(callbackSem[priority]))!=OK) {
|
||||
/*semGive randomly returns garbage value*/
|
||||
/*
|
||||
errMessage(-1,"semGive returned error in callbackRequest\n");
|
||||
logMsg("semGive returned error in callbackRequest\n",0,0,0,0,0,0);
|
||||
*/
|
||||
}
|
||||
return;
|
||||
@@ -136,7 +136,8 @@ static void start(int ind)
|
||||
errMessage(0,"rngCreate failed while starting a callback task");
|
||||
callbackTaskId[ind] = taskSpawn(CALLBACK_NAME,priority,
|
||||
CALLBACK_OPT,CALLBACK_STACK,
|
||||
(FUNCPTR)callbackTask,ind,0,0,0,0,0,0,0,0,0);
|
||||
(FUNCPTR)callbackTask,ind,
|
||||
0,0,0,0,0,0,0,0,0);
|
||||
if(callbackTaskId[ind]==ERROR) {
|
||||
errMessage(0,"Failed to spawn a callback task");
|
||||
return;
|
||||
|
||||
@@ -77,7 +77,6 @@
|
||||
#include <taskLib.h>
|
||||
#include <vxLib.h>
|
||||
#include <tickLib.h>
|
||||
#include <lstLib.h>
|
||||
|
||||
#include <fast_lock.h>
|
||||
#include <cvtFast.h>
|
||||
|
||||
@@ -47,9 +47,8 @@
|
||||
|
||||
/* needed for NULL */
|
||||
#include <vxWorks.h>
|
||||
|
||||
/* needed for typedef of caddr_t which is used in struct dbAddr */
|
||||
#include <types.h>
|
||||
#include <stdlib.h>
|
||||
#include <stdio.h>
|
||||
|
||||
/* needed for PVNAME_SZ and FLDNAME_SZ ... must be before dbAccess.h */
|
||||
#include <dbDefs.h>
|
||||
@@ -335,7 +334,6 @@ long *poptions;
|
||||
long *pnrequest;
|
||||
{
|
||||
|
||||
char errmsg[100];
|
||||
long rc;
|
||||
|
||||
if (psource_dbaddr)
|
||||
@@ -417,7 +415,6 @@ unsigned short new_severity;
|
||||
unsigned short new_status;
|
||||
{
|
||||
|
||||
char errmsg[100];
|
||||
long rc;
|
||||
|
||||
if (pdest_dbaddr)
|
||||
@@ -468,7 +465,6 @@ void *pval;
|
||||
long nelements;
|
||||
{
|
||||
|
||||
char errmsg[100];
|
||||
long rc;
|
||||
|
||||
if (pdest_dbaddr)
|
||||
|
||||
@@ -62,7 +62,7 @@
|
||||
#include <vxWorks.h>
|
||||
#include <types.h>
|
||||
#include <wdLib.h>
|
||||
#include <lstLib.h>
|
||||
#include <dllEpicsLib.h>
|
||||
#include <semLib.h>
|
||||
|
||||
#include <tsDefs.h>
|
||||
@@ -119,7 +119,7 @@ typedef struct{
|
||||
#define abort taskSuspend;
|
||||
|
||||
struct event_block{
|
||||
NODE node;
|
||||
DLLNODE node;
|
||||
struct db_addr *paddr;
|
||||
void (*user_sub)();
|
||||
void *user_arg;
|
||||
@@ -403,7 +403,7 @@ register struct event_block *pevent; /* ptr to event blk (not required) */
|
||||
pevent->valque = FALSE;
|
||||
|
||||
LOCKREC(precord);
|
||||
lstAdd((LIST*)&precord->mlis, (NODE*)pevent);
|
||||
dllAdd((DLLLIST*)&precord->mlis, (DLLNODE*)pevent);
|
||||
UNLOCKREC(precord);
|
||||
|
||||
return OK;
|
||||
@@ -434,9 +434,9 @@ register struct event_block *pevent;
|
||||
|
||||
LOCKREC(precord);
|
||||
/* dont let a misplaced event corrupt the queue */
|
||||
status = lstFind((LIST*)&precord->mlis, (NODE*)pevent);
|
||||
status = dllFind((DLLLIST*)&precord->mlis, (DLLNODE*)pevent);
|
||||
if(status!=ERROR)
|
||||
lstDelete((LIST*)&precord->mlis, (NODE*)pevent);
|
||||
dllDelete((DLLLIST*)&precord->mlis, (DLLNODE*)pevent);
|
||||
UNLOCKREC(precord);
|
||||
if(status == ERROR)
|
||||
return ERROR;
|
||||
|
||||
@@ -45,7 +45,7 @@
|
||||
#include <string.h>
|
||||
#include <semLib.h>
|
||||
#include <rngLib.h>
|
||||
#include <lstLib.h>
|
||||
#include <dllEpicsLib.h>
|
||||
#include <vxLib.h>
|
||||
#include <tickLib.h>
|
||||
|
||||
@@ -67,13 +67,13 @@ extern volatile int interruptAccept;
|
||||
|
||||
struct scan_list{
|
||||
FAST_LOCK lock;
|
||||
LIST list;
|
||||
DLLLIST list;
|
||||
short modified;/*has list been modified?*/
|
||||
long ticks; /*ticks per period for periodic*/
|
||||
};
|
||||
/*scan_elements are allocated and the address stored in dbCommon.spvt*/
|
||||
struct scan_element{
|
||||
NODE node;
|
||||
DLLNODE node;
|
||||
struct scan_list *pscan_list;
|
||||
struct dbCommon *precord;
|
||||
};
|
||||
@@ -177,7 +177,7 @@ void scanAdd(struct dbCommon *precord)
|
||||
psl = dbCalloc(1,sizeof(struct scan_list));
|
||||
papEvent[precord->evnt] = psl;
|
||||
FASTLOCKINIT(&psl->lock);
|
||||
lstInit(&psl->list);
|
||||
dllInit(&psl->list);
|
||||
}
|
||||
addToList(precord,psl);
|
||||
} else if(scan==SCAN_IO_EVENT) {
|
||||
@@ -338,7 +338,7 @@ void scanIoInit(IOSCANPVT *ppioscanpvt)
|
||||
priority<NUM_CALLBACK_PRIORITIES; priority++, piosl++){
|
||||
piosl->callback.callback = ioeventCallback;
|
||||
piosl->callback.priority = priority;
|
||||
lstInit(&piosl->scan_list.list);
|
||||
dllInit(&piosl->scan_list.list);
|
||||
FASTLOCKINIT(&piosl->scan_list.lock);
|
||||
piosl->next=iosl_head[priority];
|
||||
iosl_head[priority]=piosl;
|
||||
@@ -355,7 +355,7 @@ void scanIoRequest(IOSCANPVT pioscanpvt)
|
||||
if(!interruptAccept) return;
|
||||
for(priority=0, piosl=pioscanpvt;
|
||||
priority<NUM_CALLBACK_PRIORITIES; priority++, piosl++){
|
||||
if(lstCount(&piosl->scan_list.list)>0) callbackRequest((void *)piosl);
|
||||
if(dllCount(&piosl->scan_list.list)>0) callbackRequest((void *)piosl);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -401,8 +401,8 @@ static void initPeriodic()
|
||||
/* look for first record */
|
||||
for (i=0; i<precHeader->number; i++) {
|
||||
if((precLoc=precHeader->papRecLoc[i])==NULL) continue;
|
||||
for(precNode=(RECNODE *)lstFirst(precLoc->preclist);
|
||||
precNode; precNode = (RECNODE *)lstNext(&precNode->node)) {
|
||||
for(precNode=(RECNODE *)dllFirst(precLoc->preclist);
|
||||
precNode; precNode = (RECNODE *)dllNext(&precNode->node)) {
|
||||
precord = precNode->precord;
|
||||
if(precord->name[0]!=0) goto got_record;
|
||||
}
|
||||
@@ -432,7 +432,7 @@ got_record:
|
||||
psl = dbCalloc(1,sizeof(struct scan_list));
|
||||
papPeriodic[i] = psl;
|
||||
FASTLOCKINIT(&psl->lock);
|
||||
lstInit(&psl->list);
|
||||
dllInit(&psl->list);
|
||||
sscanf(scanChoices.strs[i+SCAN_1ST_PERIODIC],"%f",&temp);
|
||||
psl->ticks = temp * vxTicksPerSecond;
|
||||
}
|
||||
@@ -537,7 +537,7 @@ static void printList(struct scan_list *psl,char *message)
|
||||
struct scan_element *pse;
|
||||
|
||||
FASTLOCK(&psl->lock);
|
||||
(void *)pse = lstFirst(&psl->list);
|
||||
(void *)pse = dllFirst(&psl->list);
|
||||
FASTUNLOCK(&psl->lock);
|
||||
if(pse==NULL) return;
|
||||
printf("%s\n",message);
|
||||
@@ -549,7 +549,7 @@ static void printList(struct scan_list *psl,char *message)
|
||||
printf("Returning because list changed while processing.");
|
||||
return;
|
||||
}
|
||||
(void *)pse = lstNext((void *)pse);
|
||||
(void *)pse = dllNext((void *)pse);
|
||||
FASTUNLOCK(&psl->lock);
|
||||
}
|
||||
}
|
||||
@@ -563,9 +563,9 @@ static void scanList(struct scan_list *psl)
|
||||
|
||||
FASTLOCK(&psl->lock);
|
||||
psl->modified = FALSE;
|
||||
(void *)pse = lstFirst(&psl->list);
|
||||
(void *)pse = dllFirst(&psl->list);
|
||||
prev = NULL;
|
||||
(void *)next = lstNext((void *)pse);
|
||||
(void *)next = dllNext((void *)pse);
|
||||
FASTUNLOCK(&psl->lock);
|
||||
while(pse!=NULL) {
|
||||
struct dbCommon *precord = pse->precord;
|
||||
@@ -576,27 +576,27 @@ static void scanList(struct scan_list *psl)
|
||||
FASTLOCK(&psl->lock);
|
||||
if(!psl->modified) {
|
||||
prev = pse;
|
||||
(void *)pse = lstNext((void *)pse);
|
||||
if(pse!=NULL) (void *)next = lstNext((void *)pse);
|
||||
(void *)pse = dllNext((void *)pse);
|
||||
if(pse!=NULL) (void *)next = dllNext((void *)pse);
|
||||
} else if (pse->pscan_list==psl) {
|
||||
/*This scan element is still in same scan list*/
|
||||
prev = pse;
|
||||
(void *)pse = lstNext((void *)pse);
|
||||
if(pse!=NULL) (void *)next = lstNext((void *)pse);
|
||||
(void *)pse = dllNext((void *)pse);
|
||||
if(pse!=NULL) (void *)next = dllNext((void *)pse);
|
||||
psl->modified = FALSE;
|
||||
} else if (prev!=NULL && prev->pscan_list==psl) {
|
||||
/*Previous scan element is still in same scan list*/
|
||||
(void *)pse = lstNext((void *)prev);
|
||||
(void *)pse = dllNext((void *)prev);
|
||||
if(pse!=NULL) {
|
||||
(void *)prev = lstPrevious((void *)pse);
|
||||
(void *)next = lstNext((void *)pse);
|
||||
(void *)prev = dllPrevious((void *)pse);
|
||||
(void *)next = dllNext((void *)pse);
|
||||
}
|
||||
psl->modified = FALSE;
|
||||
} else if (next!=NULL && next->pscan_list==psl) {
|
||||
/*Next scan element is still in same scan list*/
|
||||
pse = next;
|
||||
(void *)prev = lstPrevious((void *)pse);
|
||||
(void *)next = lstNext((void *)pse);
|
||||
(void *)prev = dllPrevious((void *)pse);
|
||||
(void *)next = dllNext((void *)pse);
|
||||
psl->modified = FALSE;
|
||||
} else {
|
||||
/*Too many changes. Just wait till next period*/
|
||||
@@ -623,8 +623,8 @@ static void buildScanLists(void)
|
||||
/* look through all of the database records and place them on lists */
|
||||
for (i=0; i<precHeader->number; i++) {
|
||||
if((precLoc=precHeader->papRecLoc[i])==NULL) continue;
|
||||
for(precNode=(RECNODE *)lstFirst(precLoc->preclist);
|
||||
precNode; precNode = (RECNODE *)lstNext(&precNode->node)) {
|
||||
for(precNode=(RECNODE *)dllFirst(precLoc->preclist);
|
||||
precNode; precNode = (RECNODE *)dllNext(&precNode->node)) {
|
||||
precord = precNode->precord;
|
||||
if(precord->name[0]==0) continue;
|
||||
scanAdd(precord);
|
||||
@@ -644,16 +644,16 @@ static void addToList(struct dbCommon *precord,struct scan_list *psl)
|
||||
(void *)pse->precord = precord;
|
||||
}
|
||||
pse ->pscan_list = psl;
|
||||
(void *)ptemp = lstFirst(&psl->list);
|
||||
(void *)ptemp = dllFirst(&psl->list);
|
||||
while(ptemp!=NULL) {
|
||||
if(ptemp->precord->phas>precord->phas) {
|
||||
lstInsert(&psl->list,
|
||||
lstPrevious((void *)ptemp),(void *)pse);
|
||||
dllInsert(&psl->list,
|
||||
dllPrevious((void *)ptemp),(void *)pse);
|
||||
break;
|
||||
}
|
||||
(void *)ptemp = lstNext((void *)ptemp);
|
||||
(void *)ptemp = dllNext((void *)ptemp);
|
||||
}
|
||||
if(ptemp==NULL) lstAdd(&psl->list,(void *)pse);
|
||||
if(ptemp==NULL) dllAdd(&psl->list,(void *)pse);
|
||||
psl->modified = TRUE;
|
||||
FASTUNLOCK(&psl->lock);
|
||||
return;
|
||||
@@ -675,7 +675,7 @@ static void deleteFromList(struct dbCommon *precord,struct scan_list *psl)
|
||||
return;
|
||||
}
|
||||
pse->pscan_list = NULL;
|
||||
lstDelete(&psl->list,(void *)pse);
|
||||
dllDelete(&psl->list,(void *)pse);
|
||||
psl->modified = TRUE;
|
||||
FASTUNLOCK(&psl->lock);
|
||||
return;
|
||||
|
||||
@@ -42,7 +42,7 @@
|
||||
#include <math.h>
|
||||
|
||||
#include <errMdef.h>
|
||||
#include <lstLib.h>
|
||||
#include <dllEpicsLib.h>
|
||||
#include <dbDefs.h>
|
||||
#include <sdrHeader.h>
|
||||
#include <cvtFast.h>
|
||||
@@ -389,13 +389,13 @@ void dbFreeBase(pdbbase)
|
||||
DBBASE *pdbbase;
|
||||
#endif /*__STDC__*/
|
||||
{
|
||||
LIST **ppvd = (LIST **) pdbbase->ppvd;
|
||||
DLLLIST **ppvd = (DLLLIST **) pdbbase->ppvd;
|
||||
struct recType *precType = (struct recType *) pdbbase->precType;
|
||||
struct recLoc *precLoc;
|
||||
struct recHeader *precHeader = (struct recHeader *) pdbbase->precHeader;
|
||||
RECNODE *precnode;
|
||||
RECNODE *pnext;
|
||||
LIST *preclist;
|
||||
DLLLIST *preclist;
|
||||
int recType;
|
||||
if (!pdbbase || !ppvd || !precType) return;
|
||||
dbPvdFreeMem(pdbbase);
|
||||
@@ -407,11 +407,11 @@ DBBASE *pdbbase;
|
||||
free((void *) precLoc);
|
||||
continue;
|
||||
}
|
||||
precnode = (RECNODE *) lstFirst(preclist);
|
||||
precnode = (RECNODE *) dllFirst(preclist);
|
||||
while(precnode) {
|
||||
pnext = (RECNODE *) lstNext((NODE *) precnode);
|
||||
pnext = (RECNODE *) dllNext((DLLNODE *) precnode);
|
||||
free(precnode->precord);
|
||||
lstDelete(preclist, (NODE*)precnode);
|
||||
dllDelete(preclist, (DLLNODE*)precnode);
|
||||
dbPvdDelete(pdbbase,precnode);
|
||||
free((void *)precnode);
|
||||
precnode = pnext;
|
||||
@@ -687,7 +687,7 @@ char *precordName;
|
||||
DBBASE *pdbbase = pdbentry->pdbbase;
|
||||
int record_type = pdbentry->record_type;
|
||||
PVDENTRY *ppvd;
|
||||
LIST *preclist = NULL;
|
||||
DLLLIST *preclist = NULL;
|
||||
RECNODE *precnode = NULL;
|
||||
RECNODE *pNewRecNode = NULL;
|
||||
void *pNewRecord = NULL;
|
||||
@@ -707,8 +707,8 @@ char *precordName;
|
||||
precLoc = precHeader->papRecLoc[record_type];
|
||||
if ((precLoc->preclist) == NULL) {
|
||||
/* allocate new list for this record type */
|
||||
precLoc->preclist = dbCalloc(1,sizeof(LIST));
|
||||
lstInit(precLoc->preclist);
|
||||
precLoc->preclist = dbCalloc(1,sizeof(DLLLIST));
|
||||
dllInit(precLoc->preclist);
|
||||
}
|
||||
preclist = precLoc->preclist;
|
||||
rec_size = precTypDes->rec_size;
|
||||
@@ -721,13 +721,13 @@ char *precordName;
|
||||
init_record(pdbbase, pNewRecord, record_type);
|
||||
pNewRecNode->precord = pNewRecord;
|
||||
/* install record node in list in sorted postion */
|
||||
precnode = (RECNODE *)lstFirst(preclist);
|
||||
precnode = (RECNODE *)dllFirst(preclist);
|
||||
while(precnode && strcmp(precordName,(char*)precnode->precord) > 0)
|
||||
precnode = (RECNODE *)lstNext((NODE*)precnode);
|
||||
precnode = (RECNODE *)dllNext((DLLNODE*)precnode);
|
||||
if(precnode)
|
||||
lstInsert(preclist, lstPrevious((NODE*)precnode) ,(NODE *)pNewRecNode);
|
||||
dllInsert(preclist, dllPrevious((DLLNODE*)precnode) ,(DLLNODE *)pNewRecNode);
|
||||
else
|
||||
lstAdd(preclist, (NODE*)pNewRecNode);
|
||||
dllAdd(preclist, (DLLNODE*)pNewRecNode);
|
||||
ppvd = dbPvdAdd(pdbbase,record_type,pNewRecNode);
|
||||
if(!ppvd) {errMessage(-1,"Logic Err: Could not add to PVD");return(-1);}
|
||||
pdbentry->precnode = pNewRecNode;
|
||||
@@ -745,13 +745,13 @@ DBENTRY *pdbentry;
|
||||
DBBASE *pdbbase = pdbentry->pdbbase;
|
||||
int record_type = pdbentry->record_type;
|
||||
RECNODE *precnode = pdbentry->precnode;
|
||||
LIST *preclist;
|
||||
DLLLIST *preclist;
|
||||
|
||||
|
||||
if (!precnode) return (-1);
|
||||
preclist = pdbbase->precHeader->papRecLoc[record_type]->preclist;
|
||||
free(precnode->precord);
|
||||
lstDelete(preclist, (NODE*)precnode);
|
||||
dllDelete(preclist, (DLLNODE*)precnode);
|
||||
dbPvdDelete(pdbbase,precnode);
|
||||
free((void *)precnode);
|
||||
pdbentry->precnode = NULL;
|
||||
@@ -807,7 +807,7 @@ DBENTRY *pdbentry;
|
||||
pdbentry->record_type = record_type;
|
||||
if(!(precLoc=GET_PRECLOC(precHeader,record_type))) return(S_dbLib_recNotFound);
|
||||
if(!precLoc->preclist) return(S_dbLib_recNotFound);
|
||||
precnode = (RECNODE *)lstFirst(precLoc->preclist);
|
||||
precnode = (RECNODE *)dllFirst(precLoc->preclist);
|
||||
if(!precnode) return(S_dbLib_recNotFound);
|
||||
pdbentry->precnode = precnode;
|
||||
return(0);
|
||||
@@ -824,7 +824,7 @@ DBENTRY *pdbentry;
|
||||
long status=0;
|
||||
|
||||
if(!precnode) return(S_dbLib_recNotFound);
|
||||
precnode = (RECNODE *)lstNext((NODE *)precnode);
|
||||
precnode = (RECNODE *)dllNext((DLLNODE *)precnode);
|
||||
if(!precnode) status = S_dbLib_recNotFound;
|
||||
pdbentry->precnode = precnode;
|
||||
pdbentry->pfield = NULL;
|
||||
@@ -847,7 +847,7 @@ DBENTRY *pdbentry;
|
||||
if(!(precLoc=GET_PRECLOC(precHeader,record_type)))
|
||||
return(0);
|
||||
if(!precLoc->preclist) return(0);
|
||||
return(lstCount(precLoc->preclist));
|
||||
return(dllCount(precLoc->preclist));
|
||||
}
|
||||
|
||||
#ifdef __STDC__
|
||||
@@ -889,7 +889,7 @@ char *newName;
|
||||
struct recHeader *precHeader = (struct recHeader *) pdbbase->precHeader;
|
||||
char *precord;
|
||||
PVDENTRY *ppvd;
|
||||
LIST *preclist;
|
||||
DLLLIST *preclist;
|
||||
RECNODE *plistnode;
|
||||
|
||||
if(!precnode) return(S_dbLib_recNotFound);
|
||||
@@ -900,14 +900,14 @@ char *newName;
|
||||
if(!ppvd) {errMessage(-1,"Logic Err: Could not add to PVD");return(-1);}
|
||||
/*remove from record list and reinstall in sorted order*/
|
||||
preclist = precHeader->papRecLoc[record_type]->preclist;
|
||||
lstDelete(preclist, (NODE*)precnode);
|
||||
plistnode = (RECNODE *)lstFirst(preclist);
|
||||
dllDelete(preclist, (DLLNODE*)precnode);
|
||||
plistnode = (RECNODE *)dllFirst(preclist);
|
||||
while(plistnode && strcmp(newName,(char*)plistnode->precord) < 0)
|
||||
plistnode = (RECNODE *)lstNext((NODE*)plistnode);
|
||||
plistnode = (RECNODE *)dllNext((DLLNODE*)plistnode);
|
||||
if(plistnode)
|
||||
lstInsert(preclist, lstPrevious((NODE*)plistnode) ,(NODE *)precnode);
|
||||
dllInsert(preclist, dllPrevious((DLLNODE*)plistnode) ,(DLLNODE *)precnode);
|
||||
else
|
||||
lstAdd(preclist, (NODE*)precnode);
|
||||
dllAdd(preclist, (DLLNODE*)precnode);
|
||||
return(0);
|
||||
}
|
||||
|
||||
@@ -3768,7 +3768,7 @@ FILE *fp;
|
||||
#endif /*__STDC__*/
|
||||
{
|
||||
RECNODE *precnode;
|
||||
LIST *preclist;
|
||||
DLLLIST *preclist;
|
||||
int no_entries;
|
||||
unsigned rec_size; /* set to record size */
|
||||
struct sdrHeader sdrHeader;
|
||||
@@ -3796,7 +3796,7 @@ FILE *fp;
|
||||
if ((precLoc = GET_PRECLOC(precHeader, recType)) == NULL) continue;
|
||||
if((preclist = precLoc->preclist) == NULL) continue;
|
||||
/* set up and write the SDR_DB_RECORDS sdrHeader */
|
||||
no_entries = lstCount(preclist);
|
||||
no_entries = dllCount(preclist);
|
||||
rec_size = pRecTypDes->rec_size;
|
||||
memset((char *) &sdrHeader, '\0', sizeof(struct sdrHeader));
|
||||
sdrHeader.magic = DBMAGIC;
|
||||
@@ -3812,9 +3812,9 @@ FILE *fp;
|
||||
errMessage(-1,"dbWrite: incomplete write");
|
||||
return (-1);
|
||||
}
|
||||
for (precnode = (RECNODE *) lstFirst(preclist);
|
||||
for (precnode = (RECNODE *) dllFirst(preclist);
|
||||
precnode != NULL;
|
||||
precnode = (RECNODE *) lstNext((NODE*)precnode)) {
|
||||
precnode = (RECNODE *) dllNext((DLLNODE*)precnode)) {
|
||||
/* write each record of this type contiguous */
|
||||
if ((fwrite(precnode->precord, (int) rec_size, 1, fp)) != 1) {
|
||||
errMessage(-1,"dbWrite: incomplete write");
|
||||
@@ -3902,9 +3902,9 @@ void dbPvdInitPvt(pdbbase)
|
||||
DBBASE *pdbbase;
|
||||
#endif /*__STDC__*/
|
||||
{
|
||||
LIST **ppvd;
|
||||
DLLLIST **ppvd;
|
||||
|
||||
ppvd = dbCalloc(HASH_NO, sizeof(LIST *));
|
||||
ppvd = dbCalloc(HASH_NO, sizeof(DLLLIST *));
|
||||
pdbbase->ppvd = (void *) ppvd;
|
||||
return;
|
||||
}
|
||||
@@ -3919,17 +3919,17 @@ int lenName;
|
||||
#endif /*__STDC__*/
|
||||
{
|
||||
unsigned short hashInd;
|
||||
LIST **ppvd = (LIST **) pdbbase->ppvd;
|
||||
LIST *pvdlist;
|
||||
DLLLIST **ppvd = (DLLLIST **) pdbbase->ppvd;
|
||||
DLLLIST *pvdlist;
|
||||
PVDENTRY *ppvdNode;
|
||||
|
||||
hashInd = hash(name, lenName);
|
||||
if ((pvdlist=ppvd[hashInd]) == NULL) return (NULL);
|
||||
ppvdNode = (PVDENTRY *) lstFirst(pvdlist);
|
||||
ppvdNode = (PVDENTRY *) dllFirst(pvdlist);
|
||||
while(ppvdNode) {
|
||||
if(strcmp(name,(char *)ppvdNode->precnode->precord) == 0)
|
||||
return(ppvdNode);
|
||||
ppvdNode = (PVDENTRY *) lstNext((NODE*)ppvdNode);
|
||||
ppvdNode = (PVDENTRY *) dllNext((DLLNODE*)ppvdNode);
|
||||
}
|
||||
return (NULL);
|
||||
}
|
||||
@@ -3944,8 +3944,8 @@ RECNODE *precnode;
|
||||
#endif /*__STDC__*/
|
||||
{
|
||||
unsigned short hashInd;
|
||||
LIST **ppvd = (LIST **) pdbbase->ppvd;
|
||||
LIST *ppvdlist;
|
||||
DLLLIST **ppvd = (DLLLIST **) pdbbase->ppvd;
|
||||
DLLLIST *ppvdlist;
|
||||
PVDENTRY *ppvdNode;
|
||||
int lenName;
|
||||
char *name=(char *)precnode->precord;
|
||||
@@ -3953,17 +3953,17 @@ RECNODE *precnode;
|
||||
lenName=strlen(name);
|
||||
hashInd = hash(name, lenName);
|
||||
if (ppvd[hashInd] == NULL) {
|
||||
ppvd[hashInd] = dbCalloc(1, sizeof(LIST));
|
||||
lstInit(ppvd[hashInd]);
|
||||
ppvd[hashInd] = dbCalloc(1, sizeof(DLLLIST));
|
||||
dllInit(ppvd[hashInd]);
|
||||
}
|
||||
ppvdlist=ppvd[hashInd];
|
||||
ppvdNode = (PVDENTRY *) lstFirst(ppvdlist);
|
||||
ppvdNode = (PVDENTRY *) dllFirst(ppvdlist);
|
||||
while(ppvdNode) {
|
||||
if(strcmp(name,(char *)ppvdNode->precnode->precord) == 0) return(NULL);
|
||||
ppvdNode = (PVDENTRY *) lstNext((NODE*)ppvdNode);
|
||||
ppvdNode = (PVDENTRY *) dllNext((DLLNODE*)ppvdNode);
|
||||
}
|
||||
ppvdNode = dbCalloc(1, sizeof(PVDENTRY));
|
||||
lstAdd(ppvdlist, (NODE*)ppvdNode);
|
||||
dllAdd(ppvdlist, (DLLNODE*)ppvdNode);
|
||||
ppvdNode->record_type = record_type;
|
||||
ppvdNode->precnode = precnode;
|
||||
return (ppvdNode);
|
||||
@@ -3979,8 +3979,8 @@ RECNODE *precnode;
|
||||
{
|
||||
char *name=(char *)precnode->precord;
|
||||
unsigned short hashInd;
|
||||
LIST **ppvd = (LIST **) pdbbase->ppvd;
|
||||
LIST *ppvdlist;
|
||||
DLLLIST **ppvd = (DLLLIST **) pdbbase->ppvd;
|
||||
DLLLIST *ppvdlist;
|
||||
PVDENTRY *ppvdNode;
|
||||
int lenName;
|
||||
|
||||
@@ -3988,14 +3988,14 @@ RECNODE *precnode;
|
||||
hashInd = hash(name, lenName);
|
||||
if (ppvd[hashInd] == NULL)return;
|
||||
ppvdlist=ppvd[hashInd];
|
||||
ppvdNode = (PVDENTRY *) lstFirst(ppvdlist);
|
||||
ppvdNode = (PVDENTRY *) dllFirst(ppvdlist);
|
||||
while(ppvdNode) {
|
||||
if(strcmp(name,(char *)ppvdNode->precnode->precord) == 0) {
|
||||
lstDelete(ppvdlist, (NODE*)ppvdNode);
|
||||
dllDelete(ppvdlist, (DLLNODE*)ppvdNode);
|
||||
free((void *)ppvdNode);
|
||||
return;
|
||||
}
|
||||
ppvdNode = (PVDENTRY *) lstNext((NODE*)ppvdNode);
|
||||
ppvdNode = (PVDENTRY *) dllNext((DLLNODE*)ppvdNode);
|
||||
}
|
||||
return;
|
||||
}
|
||||
@@ -4008,8 +4008,8 @@ DBBASE *pdbbase;
|
||||
#endif /*__STDC__*/
|
||||
{
|
||||
unsigned short hashInd;
|
||||
LIST **ppvd = (LIST **) pdbbase->ppvd;
|
||||
LIST *ppvdlist;
|
||||
DLLLIST **ppvd = (DLLLIST **) pdbbase->ppvd;
|
||||
DLLLIST *ppvdlist;
|
||||
PVDENTRY *ppvdNode;
|
||||
PVDENTRY *next;
|
||||
|
||||
@@ -4017,10 +4017,10 @@ DBBASE *pdbbase;
|
||||
for (hashInd=0; hashInd<HASH_NO; hashInd++) {
|
||||
if(ppvd[hashInd] == NULL) continue;
|
||||
ppvdlist=ppvd[hashInd];
|
||||
ppvdNode = (PVDENTRY *) lstFirst(ppvdlist);
|
||||
ppvdNode = (PVDENTRY *) dllFirst(ppvdlist);
|
||||
while(ppvdNode) {
|
||||
next = (PVDENTRY *) lstNext((NODE*)ppvdNode);
|
||||
lstDelete(ppvdlist,(NODE*)ppvdNode);
|
||||
next = (PVDENTRY *) dllNext((DLLNODE*)ppvdNode);
|
||||
dllDelete(ppvdlist,(DLLNODE*)ppvdNode);
|
||||
free((void *)ppvdNode);
|
||||
ppvdNode = next;
|
||||
}
|
||||
@@ -4037,8 +4037,8 @@ DBBASE *pdbbase;
|
||||
#endif /*__STDC__*/
|
||||
{
|
||||
unsigned short hashInd;
|
||||
LIST **ppvd = (LIST **) pdbbase->ppvd;
|
||||
LIST *ppvdlist;
|
||||
DLLLIST **ppvd = (DLLLIST **) pdbbase->ppvd;
|
||||
DLLLIST *ppvdlist;
|
||||
PVDENTRY *ppvdNode;
|
||||
int number;
|
||||
|
||||
@@ -4047,13 +4047,13 @@ DBBASE *pdbbase;
|
||||
for (hashInd=0; hashInd<HASH_NO; hashInd++) {
|
||||
if(ppvd[hashInd] == NULL) continue;
|
||||
ppvdlist=ppvd[hashInd];
|
||||
ppvdNode = (PVDENTRY *) lstFirst(ppvdlist);
|
||||
printf(" %3.3hd=%3.3d\n",hashInd,lstCount(ppvdlist));
|
||||
ppvdNode = (PVDENTRY *) dllFirst(ppvdlist);
|
||||
printf(" %3.3hd=%3.3d\n",hashInd,dllCount(ppvdlist));
|
||||
number=0;
|
||||
while(ppvdNode) {
|
||||
printf(" %s",(char *)ppvdNode->precnode->precord);
|
||||
if(number++ ==2) {number=0;printf("\n ");}
|
||||
ppvdNode = (PVDENTRY *) lstNext((NODE*)ppvdNode);
|
||||
ppvdNode = (PVDENTRY *) dllNext((DLLNODE*)ppvdNode);
|
||||
}
|
||||
}
|
||||
printf("\nEnd of Process Variable Directory\n");
|
||||
|
||||
@@ -81,7 +81,7 @@
|
||||
#include <string.h>
|
||||
#include <stdio.h>
|
||||
|
||||
#include <lstLib.h>
|
||||
#include <dllEpicsLib.h>
|
||||
#include <fast_lock.h>
|
||||
#include <dbDefs.h>
|
||||
#include <dbAccess.h>
|
||||
@@ -188,8 +188,8 @@ long dbl(char *ptypeName)
|
||||
got_it:
|
||||
for(rectype=beg; rectype<=end; rectype++) {
|
||||
if(!(precLoc=GET_PRECLOC(precHeader,rectype))) continue;
|
||||
for(precNode=(RECNODE *)lstFirst(precLoc->preclist);
|
||||
precNode; precNode = (RECNODE *)lstNext(&precNode->node)) {
|
||||
for(precNode=(RECNODE *)dllFirst(precLoc->preclist);
|
||||
precNode; precNode = (RECNODE *)dllNext(&precNode->node)) {
|
||||
precord = precNode->precord;
|
||||
if(precord->name[0] == 0) continue; /*deleted record*/
|
||||
strncpy(name,precord->name,PVNAME_SZ);
|
||||
@@ -629,8 +629,8 @@ long dblls(int lockset)
|
||||
printf(" lset lcnt disv disa pact\n");
|
||||
for(rectype=beg; rectype<=end; rectype++) {
|
||||
if(!(precLoc=GET_PRECLOC(precHeader,rectype))) continue;
|
||||
for(precNode=(RECNODE *)lstFirst(precLoc->preclist);
|
||||
precNode; precNode = (RECNODE *)lstNext(&precNode->node)) {
|
||||
for(precNode=(RECNODE *)dllFirst(precLoc->preclist);
|
||||
precNode; precNode = (RECNODE *)dllNext(&precNode->node)) {
|
||||
precord = precNode->precord;
|
||||
if(precord->name[0] == 0) continue; /*deleted record*/
|
||||
if(lockset>0 && lockset!=precord->lset) continue;
|
||||
|
||||
@@ -32,12 +32,13 @@
|
||||
* .03 08-13-91 mrk Added extra null arg to db_get_field calls
|
||||
*/
|
||||
#include <vxWorks.h>
|
||||
#include <types.h>
|
||||
#include <stdlib.h>
|
||||
#include <stdio.h>
|
||||
#include <db_access.h>
|
||||
|
||||
|
||||
/* function declarations */
|
||||
static print_returned();
|
||||
static void print_returned();
|
||||
|
||||
|
||||
char tgf_buffer[600];
|
||||
@@ -100,8 +101,6 @@ short index;
|
||||
struct db_addr addr;
|
||||
struct db_addr *paddr = &addr;
|
||||
char buffer[500];
|
||||
struct dbr_ctrl_enum test_enum;
|
||||
short i;
|
||||
short shortvalue;
|
||||
long longvalue;
|
||||
float floatvalue;
|
||||
@@ -189,7 +188,7 @@ short index;
|
||||
*
|
||||
* print out the values in a database access interface structure
|
||||
*/
|
||||
static print_returned(type,pbuffer,count)
|
||||
static void print_returned(type,pbuffer,count)
|
||||
short type;
|
||||
char *pbuffer;
|
||||
short count;
|
||||
|
||||
@@ -66,11 +66,11 @@
|
||||
#include <recSup.h>
|
||||
#endif
|
||||
|
||||
#include <lstLib.h>
|
||||
#include <dbBase.h>
|
||||
#include <dbRecDes.h>
|
||||
#include <dbRecords.h>
|
||||
#include <errMdef.h>
|
||||
#include <errno.h>
|
||||
#include <error.h>
|
||||
#include <sdrHeader.h>
|
||||
|
||||
@@ -87,18 +87,18 @@ extern struct dbBase *pdbBase;
|
||||
#endif
|
||||
|
||||
/* forward references */
|
||||
static void DbRecType();
|
||||
static void DrvSup();
|
||||
static void DevSup();
|
||||
static void DbRecDes();
|
||||
static void CvtTable();
|
||||
static void ChoiceRec();
|
||||
static void ChoiceDev();
|
||||
static void ChoiceCvt();
|
||||
static void ChoiceGbl();
|
||||
static void DbErrDes();
|
||||
static void DbRecords();
|
||||
static void RecSup();
|
||||
void DbRecType();
|
||||
void DrvSup();
|
||||
void DevSup();
|
||||
void DbRecDes();
|
||||
void CvtTable();
|
||||
void ChoiceRec();
|
||||
void ChoiceDev();
|
||||
void ChoiceCvt();
|
||||
void ChoiceGbl();
|
||||
void DbErrDes();
|
||||
void DbRecords();
|
||||
void RecSup();
|
||||
int getSelection();
|
||||
|
||||
static char buffer[512];
|
||||
@@ -219,7 +219,7 @@ int dbls()
|
||||
printf("ENTER FULL_PATH_NAME OF OUTPUT LISTING FILE : ");
|
||||
scanf("%s", fname);
|
||||
if ((fp = fopen(fname, "a")) == NULL) {
|
||||
printf("dbls: fopen error errno=%d\nfile=%s\n", MYERRNO, fname);
|
||||
printf("dbls: fopen error errno=%d\nfile=%s\n", errno, fname);
|
||||
printf("TRY: < cd \"/full_dir_path/.\" > to correct this failure\n");
|
||||
return (-1);
|
||||
}
|
||||
|
||||
@@ -61,7 +61,7 @@
|
||||
#include <stdarg.h>
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
#include <lstLib.h>
|
||||
#include <dllEpicsLib.h>
|
||||
#include <sysLib.h>
|
||||
#include <symLib.h>
|
||||
#include <sysSymTbl.h> /* for sysSymTbl*/
|
||||
@@ -394,8 +394,8 @@ static long initDatabase(void)
|
||||
}
|
||||
precTypDes = precDes->papRecTypDes[i];
|
||||
pdevSup = GET_PDEVSUP(pdbBase->precDevSup,i);
|
||||
for(precNode=(RECNODE *)lstFirst(precLoc->preclist);
|
||||
precNode; precNode = (RECNODE *)lstNext(&precNode->node)) {
|
||||
for(precNode=(RECNODE *)dllFirst(precLoc->preclist);
|
||||
precNode; precNode = (RECNODE *)dllNext(&precNode->node)) {
|
||||
precord = precNode->precord;
|
||||
/* If NAME is null then skip this record*/
|
||||
if(!(precord->name[0])) continue;
|
||||
@@ -403,7 +403,7 @@ static long initDatabase(void)
|
||||
(struct rset *)(precord->rset) = prset;
|
||||
/* initialize mlok and mlis*/
|
||||
FASTLOCKINIT(&precord->mlok);
|
||||
lstInit(&(precord->mlis));
|
||||
dllInit(&(precord->mlis));
|
||||
precord->pact=FALSE;
|
||||
/* set lset=0 See determine lock set below*/
|
||||
precord->lset = 0;
|
||||
@@ -420,8 +420,8 @@ static long initDatabase(void)
|
||||
for(i=0; i< (precHeader->number); i++) {
|
||||
if(!(precLoc = precHeader->papRecLoc[i]))continue;
|
||||
precTypDes = precDes->papRecTypDes[i];
|
||||
for(precNode=(RECNODE *)lstFirst(precLoc->preclist);
|
||||
precNode; precNode = (RECNODE *)lstNext(&precNode->node)) {
|
||||
for(precNode=(RECNODE *)dllFirst(precLoc->preclist);
|
||||
precNode; precNode = (RECNODE *)dllNext(&precNode->node)) {
|
||||
precord = precNode->precord;
|
||||
/* If NAME is null then skip this record*/
|
||||
if(!(precord->name[0])) continue;
|
||||
@@ -479,8 +479,8 @@ static long initDatabase(void)
|
||||
if(!(precLoc = precHeader->papRecLoc[i]))continue;
|
||||
if(!(prset=GET_PRSET(precSup,i))) continue;
|
||||
precTypDes = precDes->papRecTypDes[i];
|
||||
for(precNode=(RECNODE *)lstFirst(precLoc->preclist);
|
||||
precNode; precNode = (RECNODE *)lstNext(&precNode->node)) {
|
||||
for(precNode=(RECNODE *)dllFirst(precLoc->preclist);
|
||||
precNode; precNode = (RECNODE *)dllNext(&precNode->node)) {
|
||||
precord = precNode->precord;
|
||||
/* If NAME is null then skip this record*/
|
||||
if(!(precord->name[0])) continue;
|
||||
@@ -504,8 +504,8 @@ static long initDatabase(void)
|
||||
for(i=0; i<precHeader->number; i++) {
|
||||
if(!(precLoc = precHeader->papRecLoc[i]))continue;
|
||||
precTypDes = precDes->papRecTypDes[i];
|
||||
for(precNode=(RECNODE *)lstFirst(precLoc->preclist);
|
||||
precNode; precNode = (RECNODE *)lstNext(&precNode->node)) {
|
||||
for(precNode=(RECNODE *)dllFirst(precLoc->preclist);
|
||||
precNode; precNode = (RECNODE *)dllNext(&precNode->node)) {
|
||||
precord = precNode->precord;
|
||||
/* If NAME is null then skip this record*/
|
||||
if(!(precord->name[0])) continue;
|
||||
@@ -576,14 +576,14 @@ static long addToSet(
|
||||
/* unless (!process_passive && !maximize_sevr) or no_elements>1*/
|
||||
/* remember that all earlier records already have lock set determined*/
|
||||
if(!lookAhead) return(0);
|
||||
precNode = (RECNODE *)lstNext(&prootNode->node);
|
||||
precNode = (RECNODE *)dllNext(&prootNode->node);
|
||||
if(!(precHeader = pdbBase->precHeader)) return(0);
|
||||
for(in=i; in<precHeader->number; in++) {
|
||||
struct dbCommon *pn;
|
||||
|
||||
if(!(precLoc = precHeader->papRecLoc[in])) continue;
|
||||
precTypDes = precDes->papRecTypDes[in];
|
||||
if(!precNode) precNode = (RECNODE *)lstFirst(precLoc->preclist);
|
||||
if(!precNode) precNode = (RECNODE *)dllFirst(precLoc->preclist);
|
||||
while(precNode) {
|
||||
pn = precNode->precord;
|
||||
/* If NAME is null then skip this record*/
|
||||
@@ -611,7 +611,7 @@ static long addToSet(
|
||||
status = addToSet(pn,in,TRUE,i,prootNode,lset);
|
||||
if(status) return(status);
|
||||
}
|
||||
precNode = (RECNODE *)lstNext(&precNode->node);
|
||||
precNode = (RECNODE *)dllNext(&precNode->node);
|
||||
}
|
||||
precNode = NULL;
|
||||
}
|
||||
@@ -629,8 +629,8 @@ static long initialProcess(void)
|
||||
if(!(precHeader = pdbBase->precHeader)) return(0);
|
||||
for(i=0; i< (precHeader->number); i++) {
|
||||
if(!(precLoc = precHeader->papRecLoc[i]))continue;
|
||||
for(precNode=(RECNODE *)lstFirst(precLoc->preclist);
|
||||
precNode; precNode = (RECNODE *)lstNext(&precNode->node)) {
|
||||
for(precNode=(RECNODE *)dllFirst(precLoc->preclist);
|
||||
precNode; precNode = (RECNODE *)dllNext(&precNode->node)) {
|
||||
precord = precNode->precord;
|
||||
/* If NAME is null then skip this record*/
|
||||
if(!(precord->name[0])) continue;
|
||||
|
||||
@@ -43,7 +43,6 @@
|
||||
#include <vxWorks.h>
|
||||
#include <limits.h>
|
||||
#include <types.h>
|
||||
#include <lstLib.h>
|
||||
#include <stdioLib.h>
|
||||
#include <strLib.h>
|
||||
|
||||
|
||||
@@ -32,25 +32,11 @@
|
||||
* .01 07-24-91 mrk Replacement for special purpose scan watchdog
|
||||
*/
|
||||
|
||||
|
||||
/* Public routines
|
||||
* taskwdInit() Initialize task watchdor
|
||||
*
|
||||
* taskwdInsert(tid,callback,arg) Insert in lists of tasks to watch
|
||||
* int tid Task Id
|
||||
* VOIDFUNCPTR callback Address of callback routine
|
||||
* void *arg Argument to pass to callback
|
||||
*
|
||||
* taskwdRemove(tid) Remove from list of tasks to watch
|
||||
*
|
||||
* int tid Task Id
|
||||
*/
|
||||
|
||||
#include <vxWorks.h>
|
||||
#include <vxLib.h>
|
||||
#include <stdlib.h>
|
||||
#include <stdio.h>
|
||||
#include <lstLib.h>
|
||||
#include <dllEpicsLib.h>
|
||||
#include <taskLib.h>
|
||||
|
||||
#include <dbDefs.h>
|
||||
@@ -60,14 +46,15 @@
|
||||
#include <fast_lock.h>
|
||||
|
||||
struct task_list {
|
||||
NODE node;
|
||||
DLLNODE node;
|
||||
VOIDFUNCPTR callback;
|
||||
void *arg;
|
||||
int tid;
|
||||
int suspended;
|
||||
};
|
||||
|
||||
static LIST list;
|
||||
static DLLLIST list;
|
||||
static DLLLIST anylist;
|
||||
static FAST_LOCK lock;
|
||||
static int taskwdid=0;
|
||||
volatile int taskwdOn=TRUE;
|
||||
@@ -84,7 +71,8 @@ static void freeList(struct task_list *pt);
|
||||
void taskwdInit()
|
||||
{
|
||||
FASTLOCKINIT(&lock);
|
||||
lstInit(&list);
|
||||
dllInit(&list);
|
||||
dllInit(&anylist);
|
||||
taskwdid = taskSpawn(TASKWD_NAME,TASKWD_PRI,
|
||||
TASKWD_OPT,TASKWD_STACK,(FUNCPTR )taskwdTask,
|
||||
0,0,0,0,0,0,0,0,0,0);
|
||||
@@ -96,7 +84,7 @@ void taskwdInsert(int tid,VOIDFUNCPTR callback,void *arg)
|
||||
|
||||
FASTLOCK(&lock);
|
||||
pt = allocList();
|
||||
lstAdd(&list,(void *)pt);
|
||||
dllAdd(&list,(void *)pt);
|
||||
pt->suspended = FALSE;
|
||||
pt->tid = tid;
|
||||
pt->callback = callback;
|
||||
@@ -104,24 +92,56 @@ void taskwdInsert(int tid,VOIDFUNCPTR callback,void *arg)
|
||||
FASTUNLOCK(&lock);
|
||||
}
|
||||
|
||||
void taskwdAnyInsert(int tid,VOIDFUNCPTR callback,void *arg)
|
||||
{
|
||||
struct task_list *pt;
|
||||
|
||||
FASTLOCK(&lock);
|
||||
pt = allocList();
|
||||
dllAdd(&anylist,(void *)pt);
|
||||
pt->tid = tid;
|
||||
pt->callback = callback;
|
||||
pt->arg = arg;
|
||||
FASTUNLOCK(&lock);
|
||||
}
|
||||
|
||||
void taskwdRemove(int tid)
|
||||
{
|
||||
struct task_list *pt;
|
||||
|
||||
FASTLOCK(&lock);
|
||||
(void *)pt = lstFirst(&list);
|
||||
pt = (struct task_list *)dllFirst(&list);
|
||||
while(pt!=NULL) {
|
||||
if (tid == pt->tid) {
|
||||
lstDelete(&list,(void *)pt);
|
||||
dllDelete(&list,(void *)pt);
|
||||
freeList(pt);
|
||||
FASTUNLOCK(&lock);
|
||||
return;
|
||||
}
|
||||
(void *)pt = lstNext((void *)pt);
|
||||
pt = (struct task_list *)dllNext((DLLNODE *)pt);
|
||||
}
|
||||
FASTUNLOCK(&lock);
|
||||
errMessage(-1,"taskwdRemove failed");
|
||||
}
|
||||
|
||||
void taskwdAnyRemove(int tid)
|
||||
{
|
||||
struct task_list *pt;
|
||||
|
||||
FASTLOCK(&lock);
|
||||
pt = (struct task_list *)dllFirst(&anylist);
|
||||
while(pt!=NULL) {
|
||||
if (tid == pt->tid) {
|
||||
dllDelete(&anylist,(void *)pt);
|
||||
freeList(pt);
|
||||
FASTUNLOCK(&lock);
|
||||
return;
|
||||
}
|
||||
pt = (struct task_list *)dllNext((void *)pt);
|
||||
}
|
||||
FASTUNLOCK(&lock);
|
||||
errMessage(-1,"taskwdanyRemove failed");
|
||||
}
|
||||
|
||||
static void taskwdTask(void)
|
||||
{
|
||||
@@ -130,18 +150,25 @@ static void taskwdTask(void)
|
||||
while(TRUE) {
|
||||
if(taskwdOn) {
|
||||
FASTLOCK(&lock);
|
||||
(void *)pt = lstFirst(&list);
|
||||
while(pt!=NULL) {
|
||||
(void *)next = lstNext((void *)pt);
|
||||
pt = (struct task_list *)dllFirst(&list);
|
||||
while(pt) {
|
||||
next = (struct task_list *)dllNext((void *)pt);
|
||||
if(taskIsSuspended(pt->tid)) {
|
||||
char *pname;
|
||||
char message[100];
|
||||
|
||||
pname = taskName(pt->tid);
|
||||
if(!pt->suspended) {
|
||||
struct task_list *ptany,*anynext;
|
||||
|
||||
sprintf(message,"task %x %s suspended",pt->tid,pname);
|
||||
errMessage(-1,message);
|
||||
if(pt->callback) (pt->callback)(pt->arg);
|
||||
ptany = (struct task_list *)dllFirst(&anylist);
|
||||
while(ptany) {
|
||||
if(ptany->callback) (ptany->callback)(ptany->arg,pt->tid);
|
||||
ptany = (struct task_list *)dllNext((DLLNODE *)ptany);
|
||||
}
|
||||
}
|
||||
pt->suspended = TRUE;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user