Add lock for db

pull/3405/head^2
2dust 2023-03-04 08:43:44 +08:00
parent b1eeb648a7
commit d4921535f2
3 changed files with 22 additions and 9 deletions

View File

@ -9,8 +9,9 @@ namespace v2rayN.Base
private static readonly Lazy<SqliteHelper> _instance = new(() => new()); private static readonly Lazy<SqliteHelper> _instance = new(() => new());
public static SqliteHelper Instance => _instance.Value; public static SqliteHelper Instance => _instance.Value;
private string _connstr; private string _connstr;
public SQLiteConnection _db; private SQLiteConnection _db;
public SQLiteAsyncConnection _dbAsync; private SQLiteAsyncConnection _dbAsync;
private static readonly object objLock = new();
public SqliteHelper() public SqliteHelper()
{ {
@ -34,7 +35,10 @@ namespace v2rayN.Base
} }
public int Replace(object model) public int Replace(object model)
{ {
return _db.InsertOrReplace(model); lock (objLock)
{
return _db.InsertOrReplace(model);
}
} }
public async Task<int> Replacesync(object model) public async Task<int> Replacesync(object model)
{ {
@ -43,7 +47,10 @@ namespace v2rayN.Base
public int Update(object model) public int Update(object model)
{ {
return _db.Update(model); lock (objLock)
{
return _db.Update(model);
}
} }
public async Task<int> UpdateAsync(object model) public async Task<int> UpdateAsync(object model)
{ {
@ -51,12 +58,18 @@ namespace v2rayN.Base
} }
public int UpdateAll(IEnumerable models) public int UpdateAll(IEnumerable models)
{ {
return _db.UpdateAll(models); lock (objLock)
{
return _db.UpdateAll(models);
}
} }
public int Delete(object model) public int Delete(object model)
{ {
return _db.Delete(model); lock (objLock)
{
return _db.Delete(model);
}
} }
public async Task<int> DeleteAsync(object model) public async Task<int> DeleteAsync(object model)
{ {

View File

@ -24,7 +24,7 @@ namespace v2rayN.Handler
_lstProfileEx = new(SqliteHelper.Instance.Table<ProfileExItem>()); _lstProfileEx = new(SqliteHelper.Instance.Table<ProfileExItem>());
Task.Run(async () => Task.Run(() =>
{ {
while (true) while (true)
{ {
@ -35,7 +35,7 @@ namespace v2rayN.Handler
var item = _lstProfileEx.FirstOrDefault(t => t.indexId == id); var item = _lstProfileEx.FirstOrDefault(t => t.indexId == id);
if (item is not null) if (item is not null)
{ {
await SqliteHelper.Instance.Replacesync(item); SqliteHelper.Instance.Replace(item);
} }
} }
Thread.Sleep(1000 * 60); Thread.Sleep(1000 * 60);

View File

@ -162,7 +162,7 @@ namespace v2rayN.Handler
todayDown = 0, todayDown = 0,
dateNow = ticks dateNow = ticks
}; };
_ = SqliteHelper.Instance.Replacesync(_serverStatItem); SqliteHelper.Instance.Replace(_serverStatItem);
_lstServerStat.Add(_serverStatItem); _lstServerStat.Add(_serverStatItem);
} }
} }