int main(int argc, char ** argv) { DnxTimer * timer; iDnxTimer * itimer; verbose = argc > 1? 1: 0; // setup test harness fakenode.xid.objType = DNX_OBJ_JOB; fakenode.xid.objSerial = 1; fakenode.xid.objSlot = 2; fakenode.reqType = DNX_REQ_DEREGISTER; fakenode.jobCap = 1; fakenode.ttl = 2; fakenode.expires = 3; strcpy(fakenode.address, "fake address"); fakejob.state = DNX_JOB_INPROGRESS; fakejob.xid.objType = DNX_OBJ_JOB; fakejob.xid.objSerial = 1; fakejob.xid.objSlot = 2; fakejob.cmd = "fake command line"; fakejob.start_time = 100; fakejob.timeout = 10; fakejob.expires = fakejob.start_time + fakejob.timeout; fakejob.payload = &fakepayload; fakejob.pNode = &fakenode; entered_dnxJobListExpire = 0; // create a short timer and reference it as a concrete object for testing CHECK_ZERO(dnxTimerCreate(&fakejoblist, 100, &timer)); itimer = (iDnxTimer *)timer; // check internal state CHECK_TRUE(itimer->joblist == &fakejoblist); CHECK_TRUE(itimer->tid != 0); CHECK_TRUE(itimer->sleepms == 100); // wait for timer to have made one pass though timer thread loop while (!entered_dnxJobListExpire) dnxCancelableSleep(10); // shut down dnxTimerDestroy(timer); return 0; }
int dnxJobListCreate(unsigned size, DnxJobList ** ppJobList) { iDnxJobList * ilist; int ret; assert(ppJobList && size); if ((ilist = (iDnxJobList *)xmalloc(sizeof *ilist)) == 0) return DNX_ERR_MEMORY; memset(ilist, 0, sizeof *ilist); if ((ilist->list = (DnxNewJob *)xmalloc(sizeof *ilist->list * size)) == 0) { xfree(ilist); return DNX_ERR_MEMORY; } memset(ilist->list, 0, sizeof *ilist->list * size); ilist->size = size; // I'm pretty sure we should initialize these... ilist->head = 0; ilist->tail = 0; DNX_PT_MUTEX_INIT(&ilist->mut); pthread_cond_init(&ilist->cond, 0); if ((ret = dnxTimerCreate((DnxJobList *)ilist, DNX_TIMER_SLEEP, &ilist->timer)) != 0) { DNX_PT_COND_DESTROY(&ilist->cond); DNX_PT_MUTEX_DESTROY(&ilist->mut); xfree(ilist->list); xfree(ilist); return ret; } *ppJobList = (DnxJobList *)ilist; return DNX_OK; }