void clearDelayed() { ListNode *n = envToClear.head; while ( n != NULL ) { /* deleteEnv((Env *) n->value, 1); */ listRemoveNoRegion( &envToClear, n ); n = envToClear.head; } n = hashtablesToClear.head; while ( n != NULL ) { deleteHashTable( ( Hashtable * ) n->value, nop ); listRemoveNoRegion( &hashtablesToClear, n ); n = hashtablesToClear.head; } n = regionsToClear.head; while ( n != NULL ) { region_free( ( Region * ) n->value ); listRemoveNoRegion( ®ionsToClear, n ); n = regionsToClear.head; } n = memoryToFree.head; while ( n != NULL ) { free( n->value ); listRemoveNoRegion( &memoryToFree, n ); n = memoryToFree.head; } }
/* precond: fileCache locked or single thread use */ iFuseDesc_t *newIFuseDesc (char *objPath, char *localPath, fileCache_t *fileCache, int *status) { iFuseDesc_t *desc; LOCK_STRUCT(*IFuseDescFreeList); /* printf("******************************************************\n"); printf("num of desc slots free = %d\n", _listSize(IFuseDescFreeList)); printf("******************************************************\n"); */ if(_listSize(IFuseDescFreeList)!=0) { ListNode *node = IFuseDescFreeList->list->head; desc = (iFuseDesc_t *) node->value; listRemoveNoRegion(IFuseDescFreeList->list, node); UNLOCK_STRUCT(*IFuseDescFreeList); REF_NO_LOCK(desc->fileCache, fileCache); desc->objPath = strdup (objPath); desc->localPath = strdup (localPath); INIT_STRUCT_LOCK(*desc); *status = 0; return desc; } else { UNLOCK_STRUCT(*IFuseDescFreeList); rodsLog (LOG_ERROR, "allocIFuseDesc: Out of iFuseDesc"); *status = SYS_OUT_OF_FILE_DESC; return NULL; } }
fileCache_t *addFileCache( int iFd, char *objPath, char *localPath, char *cachePath, int mode, rodsLong_t fileSize, cacheState_t state ) { uint cachedTime = time( 0 ); fileCache_t *fileCache, *swapCache; if ( state == NO_FILE_CACHE ) { return newFileCache( iFd, objPath, localPath, cachePath, cachedTime, mode, fileSize, state ); } else { fileCache = newFileCache( iFd, objPath, localPath, cachePath, cachedTime, mode, fileSize, state ); LOCK_STRUCT( *FileCacheList ); if ( _listSize( FileCacheList ) >= NUM_NEWLY_CREATED_SLOT ) { ListNode *node = FileCacheList->list->head; swapCache = ( fileCache_t * ) node->value; listRemoveNoRegion( FileCacheList->list, node ); UNLOCK_STRUCT( *FileCacheList ); ifuseFileCacheSwapOut( swapCache ); LOCK_STRUCT( *FileCacheList ); listAppendNoRegion( FileCacheList->list, fileCache ); } UNLOCK_STRUCT( *FileCacheList ); return fileCache; } }
void* removeFirstElementOfConcurrentList(concurrentList_t *l) { LOCK_STRUCT(*l); void* tmp; if(l->list->head == NULL) { tmp = NULL; } else { tmp = l->list->head->value; listRemoveNoRegion(l->list, l->list->head); } UNLOCK_STRUCT(*l); return tmp; }
void removeFromConcurrentList(concurrentList_t *l, ListNode *v) { LOCK_STRUCT(*l); listRemoveNoRegion(l->list, v); UNLOCK_STRUCT(*l); }