void GDALDestroyTPSTransformer( void *pTransformArg ) { VALIDATE_POINTER0( pTransformArg, "GDALDestroyTPSTransformer" ); TPSTransformInfo *psInfo = (TPSTransformInfo *) pTransformArg; if( CPLAtomicDec(&(psInfo->nRefCount)) == 0 ) { delete psInfo->poForward; delete psInfo->poReverse; GDALDeinitGCPs( psInfo->nGCPCount, psInfo->pasGCPList ); CPLFree( psInfo->pasGCPList ); CPLFree( pTransformArg ); } }
void GDALDestroyGCPTransformer( void *pTransformArg ) { GCPTransformInfo *psInfo = NULL; if( pTransformArg == NULL ) return; psInfo = (GCPTransformInfo *) pTransformArg; if( CPLAtomicDec(&(psInfo->nRefCount)) == 0 ) { GDALDeinitGCPs( psInfo->nGCPCount, psInfo->pasGCPList ); CPLFree( psInfo->pasGCPList ); CPLFree( pTransformArg ); } }
void GDALDestroyTPSTransformer( void *pTransformArg ) { if( pTransformArg == NULL ) return; TPSTransformInfo *psInfo = (TPSTransformInfo *) pTransformArg; if( CPLAtomicDec(&(psInfo->nRefCount)) == 0 ) { delete psInfo->poForward; delete psInfo->poReverse; GDALDeinitGCPs( psInfo->nGCPCount, psInfo->pasGCPList ); CPLFree( psInfo->pasGCPList ); CPLFree( pTransformArg ); } }
void GDALAbstractBandBlockCache::FreeDanglingBlocks() { GDALRasterBlock* poList; { CPLLockHolderOptionalLockD(hSpinLock); poList = psListBlocksToFree; psListBlocksToFree = NULL; } while( poList ) { #ifdef DEBUG_VERBOSE_ABBC CPLAtomicDec(&nAllBandsKeptAlivedBlocks); fprintf(stderr, "FreeDanglingBlocks(): nAllBandsKeptAlivedBlocks=%d\n", nAllBandsKeptAlivedBlocks); #endif GDALRasterBlock* poNext = poList->poNext; poList->poNext = NULL; delete poList; poList = poNext; } }
void GDALAbstractBandBlockCache::AddBlockToFreeList( GDALRasterBlock *poBlock ) { CPLAssert(poBlock->poPrevious == NULL); CPLAssert(poBlock->poNext == NULL); { #ifdef DEBUG_VERBOSE_ABBC CPLAtomicInc(&nAllBandsKeptAlivedBlocks); fprintf(stderr, "AddBlockToFreeList(): nAllBandsKeptAlivedBlocks=%d\n", nAllBandsKeptAlivedBlocks); #endif CPLLockHolderOptionalLockD(hSpinLock); poBlock->poNext = psListBlocksToFree; psListBlocksToFree = poBlock; } // If no more blocks in transient state, then warn WaitKeepAliveCounter() CPLAcquireMutex(hCondMutex, 1000); if( CPLAtomicDec(&nKeepAliveCounter) == 0 ) { CPLCondSignal(hCond); } CPLReleaseMutex(hCondMutex); }
GDALRasterBlock* GDALAbstractBandBlockCache::CreateBlock(int nXBlockOff, int nYBlockOff) { GDALRasterBlock* poBlock; { CPLLockHolderOptionalLockD(hSpinLock); poBlock = psListBlocksToFree; if( poBlock ) { #ifdef DEBUG_VERBOSE_ABBC CPLAtomicDec(&nAllBandsKeptAlivedBlocks); fprintf(stderr, "CreateBlock(): nAllBandsKeptAlivedBlocks=%d\n", nAllBandsKeptAlivedBlocks); #endif psListBlocksToFree = poBlock->poNext; } } if( poBlock ) poBlock->RecycleFor(nXBlockOff, nYBlockOff); else poBlock = new (std::nothrow) GDALRasterBlock( poBand, nXBlockOff, nYBlockOff ); return poBlock; }