Skip to content

Commit

Permalink
Fixed EsentCursor and EsentModel resources disposal
Browse files Browse the repository at this point in the history
  • Loading branch information
daniilch authored and martin1cerny committed Sep 21, 2023
1 parent 5c3f842 commit 954f01c
Show file tree
Hide file tree
Showing 2 changed files with 47 additions and 23 deletions.
43 changes: 30 additions & 13 deletions Xbim.IO.Esent/Esent/EsentCursor.cs
Original file line number Diff line number Diff line change
Expand Up @@ -53,19 +53,36 @@ public abstract class EsentCursor : IDisposable

protected EsentCursor(EsentModel model, string database, OpenDatabaseGrbit mode)
{
LockObject = new Object();
Model = model;
Instance = model.Cache.JetInstance;
Sesid = new Session(Instance);
Api.JetOpenDatabase(Sesid, database, String.Empty, out DbId, mode);
Api.JetOpenTable(Sesid, DbId, GlobalsTableName, null, 0, mode == OpenDatabaseGrbit.ReadOnly ? OpenTableGrbit.ReadOnly :
mode == OpenDatabaseGrbit.Exclusive ? OpenTableGrbit.DenyWrite : OpenTableGrbit.None,
out GlobalsTable);
EntityCountColumn = Api.GetTableColumnid(Sesid, GlobalsTable, EntityCountColumnName);
GeometryCountColumn = Api.GetTableColumnid(Sesid, GlobalsTable, GeometryCountColumnName);
FlushColumn = Api.GetTableColumnid(Sesid, GlobalsTable, FlushColumnName);
IfcHeaderColumn = Api.GetTableColumnid(Sesid, GlobalsTable, ifcHeaderColumnName);
ReadOnly = (mode == OpenDatabaseGrbit.ReadOnly);
try
{
LockObject = new Object();
Model = model;
Instance = model.Cache.JetInstance;
Sesid = new Session(Instance);
Api.JetOpenDatabase(Sesid, database, String.Empty, out DbId, mode);
Api.JetOpenTable(Sesid, DbId, GlobalsTableName, null, 0, mode == OpenDatabaseGrbit.ReadOnly ? OpenTableGrbit.ReadOnly :
mode == OpenDatabaseGrbit.Exclusive ? OpenTableGrbit.DenyWrite : OpenTableGrbit.None,
out GlobalsTable);
EntityCountColumn = Api.GetTableColumnid(Sesid, GlobalsTable, EntityCountColumnName);
GeometryCountColumn = Api.GetTableColumnid(Sesid, GlobalsTable, GeometryCountColumnName);
FlushColumn = Api.GetTableColumnid(Sesid, GlobalsTable, FlushColumnName);
IfcHeaderColumn = Api.GetTableColumnid(Sesid, GlobalsTable, ifcHeaderColumnName);
ReadOnly = (mode == OpenDatabaseGrbit.ReadOnly);
}
catch
{
if (Sesid != null)
{
if (Table != JET_TABLEID.Nil && !Table.IsInvalid)
Api.JetCloseTable(Sesid, Table);
if (GlobalsTable != JET_TABLEID.Nil && !GlobalsTable.IsInvalid)
Api.JetCloseTable(Sesid, GlobalsTable);
if (DbId != JET_DBID.Nil && DbId != default(JET_DBID))
Api.JetCloseDatabase(Sesid, DbId, CloseDatabaseGrbit.None);
Api.JetEndSession(Sesid, EndSessionGrbit.None);
}
throw;
}
}

internal abstract int RetrieveCount();
Expand Down
27 changes: 17 additions & 10 deletions Xbim.IO.Esent/Esent/EsentModel.cs
Original file line number Diff line number Diff line change
Expand Up @@ -1138,18 +1138,21 @@ public IGeometryStore GeometryStore

public static IStepFileHeader GetStepFileHeader(string fileName)
{
//create a temporary model
var esentModel = new EsentModel();
esentModel.InstanceCache = new PersistedEntityInstanceCache(esentModel, null);
EsentModel esentModel = null;
EsentEntityCursor entTable = null;

esentModel.InstanceCache.DatabaseName = fileName;
IStepFileHeader header;
var entTable = esentModel.InstanceCache.GetEntityTable();
try
{
//create a temporary model
esentModel = new EsentModel();
esentModel.InstanceCache = new PersistedEntityInstanceCache(esentModel, null);
esentModel.InstanceCache.DatabaseName = fileName;

entTable = esentModel.InstanceCache.GetEntityTable();
using (entTable.BeginReadOnlyTransaction())
{
header = entTable.ReadHeader();
var header = entTable.ReadHeader();
return header;
}
}
catch (Exception e)
Expand All @@ -1158,10 +1161,14 @@ public static IStepFileHeader GetStepFileHeader(string fileName)
}
finally
{
esentModel.InstanceCache.FreeTable(entTable);
esentModel.Dispose();
if (esentModel != null)
{
if (entTable != null)
esentModel.InstanceCache.FreeTable(entTable);

esentModel.Dispose();
}
}
return header;
}

public void CreateFrom(IModel model, string fileName, ReportProgressDelegate progDelegate = null)
Expand Down

0 comments on commit 954f01c

Please sign in to comment.