Esempio n. 1
0
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( &regionsToClear, n );
        n = regionsToClear.head;
    }
    n = memoryToFree.head;
    while ( n != NULL ) {
        free( n->value );
        listRemoveNoRegion( &memoryToFree, n );
        n = memoryToFree.head;
    }
}
Esempio n. 2
0
/* 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;
	}
}
Esempio n. 3
0
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;
    }
}
Esempio n. 4
0
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;
}
Esempio n. 5
0
void removeFromConcurrentList(concurrentList_t *l, ListNode *v) {	LOCK_STRUCT(*l);
listRemoveNoRegion(l->list, v);
UNLOCK_STRUCT(*l);
}