diff options
Diffstat (limited to 'src/memdb.c')
-rw-r--r-- | src/memdb.c | 23 |
1 files changed, 16 insertions, 7 deletions
diff --git a/src/memdb.c b/src/memdb.c index 739251312..215bfbb24 100644 --- a/src/memdb.c +++ b/src/memdb.c @@ -475,13 +475,22 @@ int sqlite3_memdb_config( unsigned int mFlags ){ MemFile *p = memdbFromDbSchema(db, zSchema); - if( p==0 ) return SQLITE_ERROR; - if( p->eLock!=SQLITE_LOCK_NONE || p->nMmap>0 ) return SQLITE_BUSY; - if( p->mFlags & SQLITE_MEMDB_FREEONCLOSE ) sqlite3_free(p->aData); - p->aData = aData; - p->sz = sz; - p->szMax = szMax; - p->mFlags = mFlags; + int rc; + if( p==0 ){ + rc = SQLITE_ERROR; + }else if( p->eLock!=SQLITE_LOCK_NONE || p->nMmap>0 ){ + rc = SQLITE_BUSY; + }else{ + if( p->mFlags & SQLITE_MEMDB_FREEONCLOSE ) sqlite3_free(p->aData); + p->aData = aData; + p->sz = sz; + p->szMax = szMax; + p->mFlags = mFlags; + rc = SQLITE_OK; + } + if( rc!=SQLITE_OK && (mFlags & SQLITE_MEMDB_FREEONCLOSE)!=0 ){ + sqlite3_free(aData); + } return SQLITE_OK; } |