Breakpoint initialization and cleanup.

This commit is contained in:
Andrew Johnson
2006-12-19 16:20:47 +00:00
parent 556724f050
commit 2a7c2e9d26
3 changed files with 25 additions and 29 deletions
+2 -2
View File
@@ -535,7 +535,7 @@ long epicsShareAPI dbProcess(dbCommon *precord)
*/
/* see if there are any stopped records or breakpoints */
if (lset_stack_not_empty) {
if (lset_stack_count != 0) {
/*
* Check to see if the record should be processed
* and activate breakpoint accordingly. If this
@@ -624,7 +624,7 @@ long epicsShareAPI dbProcess(dbCommon *precord)
/* process record */
status = (*prset->process)(precord);
/* Print record's fields if PRINT_MASK set in breakpoint field */
if (lset_stack_not_empty) {
if (lset_stack_count != 0) {
dbPrint(precord);
}
all_done:
+19 -24
View File
@@ -141,7 +141,7 @@ static long FIND_CONT_NODE(
* normal record execution, i.e. when there aren't
* any breakpoints set.
*/
long lset_stack_not_empty = 0;
long lset_stack_count = 0;
/*
* Stack--in which each entry represents a different
@@ -154,7 +154,7 @@ long lset_stack_not_empty = 0;
* operating with this stack.
*/
static ELLLIST lset_stack;
static epicsMutexId bkpt_stack_sem;
static epicsMutexId bkpt_stack_sem = 0;
/*
* Stores the last lockset continued or stepped from.
@@ -250,6 +250,18 @@ static long FIND_CONT_NODE(
}
/*
* Initialise the breakpoint stack
*/
void epicsShareAPI dbBkptInit(void)
{
if (! bkpt_stack_sem) {
bkpt_stack_sem = epicsMutexMustCreate();
ellInit(&lset_stack);
lset_stack_count = 0;
}
}
/*
* Add breakpoint to a lock set
* 1. Convert name to address and check breakpoint mask.
@@ -290,17 +302,6 @@ long epicsShareAPI dbb(const char *record_name)
* Add lock set to the stack of lock sets that
* contain breakpoints and/or stopped records.
*/
if (! lset_stack_not_empty) {
/* initialize list and semaphore */
bkpt_stack_sem = epicsMutexCreate();
if (bkpt_stack_sem == 0) {
printf(" BKPT> epicsMutexCreate failed\n");
dbScanUnlock(precord);
return(1);
}
ellInit(&lset_stack);
lset_stack_not_empty = 1;
}
epicsMutexMustLock(bkpt_stack_sem);
@@ -335,7 +336,9 @@ long epicsShareAPI dbb(const char *record_name)
pnode->taskid = 0;
pnode->step = 0;
pnode->l_num = dbLockGetLockId(precord);
ellAdd(&lset_stack, (ELLNODE *)pnode);
++lset_stack_count;
}
/*
@@ -604,11 +607,11 @@ static void dbBkptCont(dbCommon *precord)
/* Reset precord. (Since no records are at a breakpoint) */
pnode->precord = NULL;
}
while (ellCount(&pnode->bp_list) != 0);
} while (ellCount(&pnode->bp_list) != 0);
/* remove node from lockset stack */
ellDelete(&lset_stack, (ELLNODE *)pnode);
--lset_stack_count;
{
/*
@@ -634,15 +637,7 @@ static void dbBkptCont(dbCommon *precord)
/* free list node */
free(pnode);
/* if last node on stack ... */
if (ellCount(&lset_stack) == 0) {
/* Unset flag, delete stack semaphore */
lset_stack_not_empty = 0;
epicsMutexDestroy(bkpt_stack_sem);
}
if (lset_stack_not_empty)
epicsMutexUnlock(bkpt_stack_sem);
epicsMutexUnlock(bkpt_stack_sem);
}
/*
+4 -3
View File
@@ -82,6 +82,7 @@ struct LS_LIST {
#define MAX_EP_COUNT 99999
epicsShareFunc void epicsShareAPI dbBkptInit(void);
epicsShareFunc long epicsShareAPI dbb(const char *recordname);
epicsShareFunc long epicsShareAPI dbd(const char *recordname);
epicsShareFunc long epicsShareAPI dbc(const char *recordname);
@@ -90,11 +91,11 @@ epicsShareFunc long epicsShareAPI dbstat(void);
epicsShareFunc long epicsShareAPI dbp(
const char *record_name, int interest_level);
epicsShareFunc long epicsShareAPI dbap(const char *record_name);
epicsShareFunc int epicsShareAPI dbBkpt(dbCommon *precord);
epicsShareFunc void epicsShareAPI dbPrint(dbCommon *precord);
epicsShareFunc int epicsShareAPI dbBkpt(struct dbCommon *precord);
epicsShareFunc void epicsShareAPI dbPrint(struct dbCommon *precord);
epicsShareFunc long epicsShareAPI dbprc(char *record_name);
extern long lset_stack_not_empty;
extern long lset_stack_count;
#ifdef __cplusplus
}