Changeset 12064

Show
Ignore:
Timestamp:
09/04/07 11:35:47 (1 year ago)
Author:
warmerdam
Message:

OGRThreadSafety: added dataset specific mutex, protect sensitive points

Files:

Legend:

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

    r12052 r12064  
    3333#include "ogr_gensql.h" 
    3434#include "ogr_attrind.h" 
     35#include "cpl_multiproc.h" 
    3536 
    3637CPL_CVSID("$Id$"); 
     
    4647    m_nRefCount = 0; 
    4748    m_poDriver = NULL; 
     49    m_hMutex = NULL; 
    4850} 
    4951 
     
    6062        m_poStyleTable = NULL; 
    6163    } 
     64 
     65    if( m_hMutex != NULL ) 
     66        CPLDestroyMutex( m_hMutex ); 
    6267} 
    6368 
     
    166171 
    167172{ 
     173    CPLMutexHolderD( (void **) &m_hMutex ); 
    168174    int nSummaryCount = m_nRefCount; 
    169175    int iLayer; 
     
    365371 
    366372{ 
     373    CPLMutexHolderD( &m_hMutex ); 
     374 
    367375    if ( ! pszName ) 
    368376        return NULL; 
     
    441449    OGRLayer *poLayer = NULL; 
    442450 
    443     for( i = 0; i < GetLayerCount(); i++ ) 
    444     { 
    445         poLayer = GetLayer(i); 
     451    { 
     452        CPLMutexHolderD( &m_hMutex ); 
     453 
     454        for( i = 0; i < GetLayerCount(); i++ ) 
     455        { 
     456            poLayer = GetLayer(i); 
     457             
     458            if( EQUAL(poLayer->GetLayerDefn()->GetName(),papszTokens[3]) ) 
     459                break; 
     460        } 
    446461         
    447         if( EQUAL(poLayer->GetLayerDefn()->GetName(),papszTokens[3]) ) 
    448             break; 
    449     } 
    450  
    451     if( i >= GetLayerCount() ) 
    452     { 
    453         CPLError( CE_Failure, CPLE_AppDefined,  
    454                   "CREATE INDEX ON failed, no such layer as `%s'.", 
    455                   papszTokens[3] ); 
    456         CSLDestroy( papszTokens ); 
    457         return OGRERR_FAILURE; 
     462        if( i >= GetLayerCount() ) 
     463        { 
     464            CPLError( CE_Failure, CPLE_AppDefined,  
     465                      "CREATE INDEX ON failed, no such layer as `%s'.", 
     466                      papszTokens[3] ); 
     467            CSLDestroy( papszTokens ); 
     468            return OGRERR_FAILURE; 
     469        } 
    458470    } 
    459471 
     
    539551    OGRLayer *poLayer=NULL; 
    540552 
    541     for( i = 0; i < GetLayerCount(); i++ ) 
    542     { 
    543         poLayer = GetLayer(i); 
     553    { 
     554        CPLMutexHolderD( &m_hMutex ); 
     555 
     556        for( i = 0; i < GetLayerCount(); i++ ) 
     557        { 
     558            poLayer = GetLayer(i); 
    544559         
    545         if( EQUAL(poLayer->GetLayerDefn()->GetName(),papszTokens[3]) ) 
    546             break; 
    547     } 
    548  
    549     if( i >= GetLayerCount() ) 
    550     { 
    551         CPLError( CE_Failure, CPLE_AppDefined,  
    552                   "CREATE INDEX ON failed, no such layer as `%s'.", 
    553                   papszTokens[3] ); 
    554         CSLDestroy( papszTokens ); 
    555         return OGRERR_FAILURE; 
     560            if( EQUAL(poLayer->GetLayerDefn()->GetName(),papszTokens[3]) ) 
     561                break; 
     562        } 
     563 
     564        if( i >= GetLayerCount() ) 
     565        { 
     566            CPLError( CE_Failure, CPLE_AppDefined,  
     567                      "CREATE INDEX ON failed, no such layer as `%s'.", 
     568                      papszTokens[3] ); 
     569            CSLDestroy( papszTokens ); 
     570            return OGRERR_FAILURE; 
     571        } 
    556572    } 
    557573 
     
    916932 
    917933{ 
     934    CPLMutexHolderD( &m_hMutex ); 
    918935    int i; 
    919936    OGRErr eErr; 
  • trunk/gdal/ogr/ogrsf_frmts/ogrsf_frmts.h

    r11853 r12064  
    5656  protected: 
    5757    int          m_bFilterIsEnvelope; 
    58     OGRGeometry *m_poFilterGeom; 
     58    OGRGeometry *m_poFilterGeom; 
    5959    OGREnvelope  m_sFilterEnvelope; 
    60  
     60     
    6161    int          FilterGeometry( OGRGeometry * ); 
    6262    int          InstallFilter( OGRGeometry * ); 
     
    153153{ 
    154154    friend class OGRSFDriverRegistrar; 
     155 
     156    void        *m_hMutex; 
    155157 
    156158  public: