Skip to content
This repository has been archived by the owner on Oct 7, 2019. It is now read-only.

Commit

Permalink
[Core] correct AutoResetEvent usage
Browse files Browse the repository at this point in the history
  • Loading branch information
Nogrod committed Aug 14, 2015
1 parent 91e80c3 commit f3fd6d9
Show file tree
Hide file tree
Showing 3 changed files with 44 additions and 39 deletions.
10 changes: 4 additions & 6 deletions Oxide.Core/Libraries/WebRequests.cs
Expand Up @@ -295,11 +295,6 @@ private void Worker()
{
while (!shutdown)
{
if (queue.Count < 1)
{
workevent.Reset();
workevent.WaitOne();
}
int workerThreads, completionPortThreads;
ThreadPool.GetAvailableThreads(out workerThreads, out completionPortThreads);
if (workerThreads <= maxWorkerThreads || completionPortThreads <= maxCompletionPortThreads)
Expand All @@ -311,7 +306,10 @@ private void Worker()
lock (syncroot)
if (queue.Count > 0)
request = queue.Dequeue();
if (request != null) request.Start();
if (request != null)
request.Start();
else
workevent.WaitOne();
}
}
catch (Exception ex)
Expand Down
38 changes: 21 additions & 17 deletions Oxide.Ext.MySql/Libraries/MySql.cs
Expand Up @@ -52,8 +52,6 @@ public class MySqlQuery
/// </summary>
public bool NonQuery { get; internal set; }

public MySql Lib { get; internal set; }

private MySqlCommand _cmd;
private MySqlConnection _connection;
private IAsyncResult _result;
Expand Down Expand Up @@ -144,19 +142,26 @@ private void Worker()
{
while (_running)
{
if (_queue.Count < 1)
MySqlQuery query = null;
lock (_syncroot)
{
foreach (var connection in _runningConnections)
if (!connection.ConnectionPersistent) CloseDb(connection);
_runningConnections.Clear();
_workevent.Reset();
_workevent.WaitOne();
if (_queue.Count > 0)
query = _queue.Peek();
else
{
foreach (var connection in _runningConnections)
if (!connection.ConnectionPersistent) CloseDb(connection);
_runningConnections.Clear();
}
}
MySqlQuery query;
lock (_syncroot) query = _queue.Peek();
if (!query.Handle()) continue;
_runningConnections.Add(query.Connection);
lock (_syncroot) _queue.Dequeue();
if (query != null)
{
if (!query.Handle()) continue;
_runningConnections.Add(query.Connection);
lock (_syncroot) _queue.Dequeue();
}
else
_workevent.WaitOne();
}
}

Expand Down Expand Up @@ -236,11 +241,11 @@ public void Query(Sql sql, Connection db, Action<List<Dictionary<string, object>
{
Sql = sql,
Connection = db,
Callback = callback,
Lib = this
Callback = callback
};
lock (_syncroot) _queue.Enqueue(query);
_workevent.Set();

}

[LibraryFunction("ExecuteNonQuery")]
Expand All @@ -251,8 +256,7 @@ public void ExecuteNonQuery(Sql sql, Connection db, Action<int> callback = null)
Sql = sql,
Connection = db,
CallbackNonQuery = callback,
NonQuery = true,
Lib = this
NonQuery = true
};
lock (_syncroot) _queue.Enqueue(query);
_workevent.Set();
Expand Down
35 changes: 19 additions & 16 deletions Oxide.Ext.SQLite/Libraries/SQLite.cs
Expand Up @@ -55,8 +55,6 @@ public class SQLiteQuery
/// </summary>
public bool NonQuery { get; internal set; }

public SQLite Lib { get; internal set; }

private SQLiteCommand _cmd;
private SQLiteConnection _connection;

Expand Down Expand Up @@ -135,18 +133,25 @@ private void Worker()
{
while (_running)
{
if (_queue.Count < 1)
SQLiteQuery query = null;
lock (_syncroot)
{
foreach (var connection in _runningConnections)
if (!connection.ConnectionPersistent) CloseDb(connection);
_runningConnections.Clear();
_workevent.Reset();
_workevent.WaitOne();
if (_queue.Count > 0)
query = _queue.Dequeue();
else
{
foreach (var connection in _runningConnections)
if (!connection.ConnectionPersistent) CloseDb(connection);
_runningConnections.Clear();
}
}
if (query != null)
{
query.Handle();
_runningConnections.Add(query.Connection);
}
SQLiteQuery query;
lock (_syncroot) query = _queue.Dequeue();
query.Handle();
_runningConnections.Add(query.Connection);
else
_workevent.WaitOne();
}
}

Expand Down Expand Up @@ -230,8 +235,7 @@ public void Query(Sql sql, Connection db, Action<List<Dictionary<string, object>
{
Sql = sql,
Connection = db,
Callback = callback,
Lib = this
Callback = callback
};
lock (_syncroot) _queue.Enqueue(query);
_workevent.Set();
Expand All @@ -245,8 +249,7 @@ public void ExecuteNonQuery(Sql sql, Connection db, Action<int> callback = null)
Sql = sql,
Connection = db,
CallbackNonQuery = callback,
NonQuery = true,
Lib = this
NonQuery = true
};
lock (_syncroot) _queue.Enqueue(query);
_workevent.Set();
Expand Down

0 comments on commit f3fd6d9

Please sign in to comment.