Changeset 13807

Show
Ignore:
Timestamp:
02/17/08 11:03:14 (3 months ago)
Author:
warmerdam
Message:

Ensure OpenShared? sharing is only with same thread (#2229)

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • trunk/gdal/ogr/ogrsf_frmts/generic/ogrsfdriverregistrar.cpp

    r13466 r13807  
    6363    papoOpenDS = NULL; 
    6464    papoOpenDSDriver = NULL; 
     65    panOpenDSPID = NULL; 
    6566 
    6667/* -------------------------------------------------------------------- */ 
     
    276277        int iDS; 
    277278        CPLMutexHolderD( &hDRMutex ); 
     279        GIntBig nThisPID = CPLGetPID(); 
    278280         
    279281        for( iDS = 0; iDS < nOpenDSCount; iDS++ ) 
     
    281283            poDS = papoOpenDS[iDS]; 
    282284             
    283             if( strcmp( pszName, papszOpenDSRawName[iDS]) == 0 ) 
     285            if( strcmp( pszName, papszOpenDSRawName[iDS]) == 0  
     286                && nThisPID == panOpenDSPID[iDS] ) 
    284287            { 
    285288                poDS->Reference(); 
     
    299302            poDS = papoOpenDS[iDS]; 
    300303             
    301             if( strcmp( pszName, poDS->GetName()) == 0 ) 
     304            if( strcmp( pszName, poDS->GetName()) == 0  
     305                && nThisPID == panOpenDSPID[iDS] ) 
    302306            { 
    303307                poDS->Reference(); 
     
    336340            CPLRealloc( papoOpenDSDriver, sizeof(char*) * (nOpenDSCount+1) ); 
    337341 
     342        panOpenDSPID = (GIntBig *)  
     343            CPLRealloc( panOpenDSPID, sizeof(GIntBig) * (nOpenDSCount+1) ); 
     344 
    338345        papszOpenDSRawName[nOpenDSCount] = CPLStrdup( pszName ); 
    339346        papoOpenDS[nOpenDSCount] = poDS; 
    340347        papoOpenDSDriver[nOpenDSCount] = poTempDriver; 
     348        panOpenDSPID[nOpenDSCount] = CPLGetPID(); 
    341349 
    342350        nOpenDSCount++; 
     
    428436        memmove( papoOpenDSDriver + iDS, papoOpenDSDriver + iDS + 1,  
    429437                 sizeof(char *) * (nOpenDSCount - iDS - 1) ); 
     438        memmove( panOpenDSPID + iDS, panOpenDSPID + iDS + 1,  
     439                 sizeof(GIntBig) * (nOpenDSCount - iDS - 1) ); 
    430440 
    431441        nOpenDSCount--; 
     
    439449            CPLFree( papoOpenDSDriver ); 
    440450            papoOpenDSDriver = NULL; 
     451            CPLFree( panOpenDSPID ); 
     452            panOpenDSPID = NULL; 
    441453        } 
    442454    } 
  • trunk/gdal/ogr/ogrsf_frmts/ogrsf_frmts.h

    r13483 r13807  
    273273    OGRDataSource **papoOpenDS; 
    274274    OGRSFDriver **papoOpenDSDriver; 
     275    GIntBig     *panOpenDSPID; 
    275276 
    276277  public: