void initHookFree(void) { initHookInit(); epicsMutexMustLock(listLock); ellFree(&functionList); epicsMutexUnlock(listLock); }
static void deletePeriodic(void) { int i; for (i = 0; i < nPeriodic; i++) { periodic_scan_list *ppsl = papPeriodic[i]; ellFree(&ppsl->scan_list.list); epicsEventDestroy(ppsl->loopEvent); epicsMutexDestroy(ppsl->scan_list.lock); free(ppsl); } free(papPeriodic); papPeriodic = NULL; }
static void ioscanDestroy(void) { ioscan_head *piosh; ioscanInit(); epicsMutexMustLock(ioscan_lock); piosh = pioscan_list; pioscan_list = NULL; epicsMutexUnlock(ioscan_lock); while (piosh) { ioscan_head *pnext = piosh->next; int prio; for (prio = 0; prio < NUM_CALLBACK_PRIORITIES; prio++) { epicsMutexDestroy(piosh->iosl[prio].scan_list.lock); ellFree(&piosh->iosl[prio].scan_list.list); } free(piosh); piosh = pnext; } }
/* * Task for continuing record processing * 1. Find lockset in stack for precord. * DO 2-3 while breakpoints exist in the lockset. * 2. Wait on execution semaphore ... * 3. Run through every entrypoint in queue, processing * those that are scheduled. * 4. Free resources for lockset, and exit task. */ static void dbBkptCont(dbCommon *precord) { struct LS_LIST *pnode; struct EP_LIST *pqe = NULL; /* * Reset breakpoint, process record, and * reset bkpt field in record */ epicsMutexMustLock(bkpt_stack_sem); FIND_LOCKSET(precord, pnode); if (pnode == NULL) { printf(" BKPT> Logic error in dbBkptCont()\n"); return; } /* * For every entrypoint scheduled, process. Run process * until there are no more breakpoints remaining in a * lock set. */ do { /* Give up semaphore before waiting to run ... */ epicsMutexUnlock(bkpt_stack_sem); /* Wait to run */ epicsEventMustWait(pnode->ex_sem); /* Bkpt stack must still be stable ! */ epicsMutexMustLock(bkpt_stack_sem); pqe = (struct EP_LIST *) ellFirst(&pnode->ep_queue); /* Run through entrypoint queue */ while (pqe != NULL) { /* check if entrypoint is currently scheduled */ if (pqe->sched) { /* save current entrypoint */ pnode->current_ep = pqe->entrypoint; /* lock the lockset, process record, unlock */ dbScanLock(precord); dbProcess(pqe->entrypoint); dbScanUnlock(precord); /* reset schedule and stepping flag - Do this AFTER processing */ pqe->sched = 0; pnode->step = 0; } pqe = (struct EP_LIST *) ellNext((ELLNODE *)pqe); } /* Reset precord. (Since no records are at a breakpoint) */ pnode->precord = NULL; } while (ellCount(&pnode->bp_list) != 0); /* remove node from lockset stack */ ellDelete(&lset_stack, (ELLNODE *)pnode); --lset_stack_count; /* free entrypoint queue */ ellFree(&pnode->ep_queue); /* remove execution semaphore */ epicsEventDestroy(pnode->ex_sem); printf("\n BKPT> End debug of lockset %lu\n-> ", pnode->l_num); /* free list node */ free(pnode); epicsMutexUnlock(bkpt_stack_sem); }
static void destroyExitPvt(exitPvt * pep) { ellFree ( &pep->list ); free ( pep ); }
/** NDAttributeList destructor */ NDAttributeList::~NDAttributeList() { this->clear(); ellFree(&this->list); epicsMutexDestroy(this->lock); }