RecursiveDirectoryInfoQuery AcquireLockForQuery (FilePath path, bool getRemoteStatus)
{
RecursiveDirectoryInfoQuery rq;
bool query = false;
lock (queryLock) {
rq = recursiveDirectoryQueryQueue.FirstOrDefault (q => q.Directory == path);
if (rq == null) {
query = true;
var mre = new ManualResetEvent (false);
rq = new RecursiveDirectoryInfoQuery {
Directory = path,
GetRemoteStatus = getRemoteStatus,
ResetEvent = mre,
Count = 1,
};
} else
Interlocked.Increment (ref rq.Count);
}
if (query)
AddQuery (rq);
return rq;
}