static Queue * getAlarmQueue (int create) { AsyncAlarmData *ad = getAlarmData(); if (!ad) return NULL; if (!ad->alarmQueue && create) { if ((ad->alarmQueue = newQueue(deallocateAlarmEntry, compareAlarmEntries))) { static AsyncQueueMethods methods = { .cancelRequest = cancelAlarm }; setQueueData(ad->alarmQueue, &methods); } } return ad->alarmQueue; }
static Element * getFunctionElement (FileDescriptor fileDescriptor, const FunctionMethods *methods, int create) { Queue *functions = getFunctionQueue(create); if (functions) { { FunctionKey key = { .fileDescriptor = fileDescriptor, .methods = methods }; { Element *element = findElement(functions, testFunctionEntry, &key); if (element) return element; } } if (create) { FunctionEntry *function; if ((function = malloc(sizeof(*function)))) { function->fileDescriptor = fileDescriptor; function->methods = methods; if ((function->operations = newQueue(deallocateOperationEntry, NULL))) { { static AsyncQueueMethods methods = { .cancelRequest = cancelOperation }; setQueueData(function->operations, &methods); } if (methods->beginFunction) methods->beginFunction(function); { Element *element = enqueueItem(functions, function); if (element) return element; } deallocateQueue(function->operations); } free(function); } else {