private int[] CreateTransaction(
TransationType transationType,
int transactionId,
List<HdaUpdateRequest> requests,
out int cancelId)
{
lock (Lock)
{
cancelId = ++m_lastCancelId;
// create the transaction.
UpdateRequestTransaction transaction = new UpdateRequestTransaction();
transaction.TransationType = transationType;
transaction.TransactionId = transactionId;
transaction.CancelId = cancelId;
transaction.Requests = new List<HdaUpdateRequest>();
// keep only the valid requests.
int[] errors = new int[requests.Count];
for (int ii = 0; ii < requests.Count; ii++)
{
errors[ii] = requests[ii].Error;
if (errors[ii] < 0)
{
continue;
}
transaction.Requests.Add(requests[ii]);
}
// queue the transaction.
if (transaction.Requests.Count > 0)
{
m_transactions.Add(transaction.CancelId, transaction);
ThreadPool.QueueUserWorkItem(DoUpdate, transaction);
}
// return the error list.
return errors;
}
}