diff options
| author | isanae <14251494+isanae@users.noreply.github.com> | 2020-02-14 01:28:50 -0500 |
|---|---|---|
| committer | isanae <14251494+isanae@users.noreply.github.com> | 2020-02-18 17:25:03 -0500 |
| commit | c8fc7abade6e28507f2a1590007a098e647026a9 (patch) | |
| tree | 13eaab40225ec292633c005f5e49b76ec5bb3f3d /src/envfs.cpp | |
| parent | 763a5d6c08006c319ed92f4088a4d3c211f80cf6 (diff) | |
thread-safe OriginConnection
ThreadPool now keeps threads running
keep ModThreads around so avoid reallocating buffers
Diffstat (limited to 'src/envfs.cpp')
| -rw-r--r-- | src/envfs.cpp | 24 |
1 files changed, 11 insertions, 13 deletions
diff --git a/src/envfs.cpp b/src/envfs.cpp index 5cd36957..a67faf84 100644 --- a/src/envfs.cpp +++ b/src/envfs.cpp @@ -212,15 +212,6 @@ void setHandleCloserThreadCount(std::size_t n) g_handleClosers.setMax(n); } -void shrinkFs() -{ - g_handleClosers.join(); - - g_handleClosers.forEach([](auto&& t) { - t.shrink(); - }); -} - void forEachEntryImpl( void* cx, HandleCloserThread& hc, std::vector<std::unique_ptr<unsigned char[]>>& buffers, POBJECT_ATTRIBUTES poa, std::size_t depth, @@ -328,14 +319,13 @@ void forEachEntryImpl( } } -void forEachEntry( + +void DirectoryWalker::forEachEntry( const std::wstring& path, void* cx, DirStartF* dirStartF, DirEndF* dirEndF, FileF* fileF) { auto& hc = g_handleClosers.request(); - std::vector<std::unique_ptr<unsigned char[]>> buffers; - if (!NtOpenFile) { LibraryPtr m(::LoadLibraryW(L"ntdll.dll")); NtOpenFile = (NtOpenFile_type)::GetProcAddress(m.get(), "NtOpenFile"); @@ -354,10 +344,18 @@ void forEachEntry( oa.Length = sizeof(oa); oa.ObjectName = &ObjectName; - forEachEntryImpl(cx, hc, buffers, &oa, 0, dirStartF, dirEndF, fileF); + forEachEntryImpl(cx, hc, m_buffers, &oa, 0, dirStartF, dirEndF, fileF); hc.wakeup(); } + +void forEachEntry( + const std::wstring& path, void* cx, + DirStartF* dirStartF, DirEndF* dirEndF, FileF* fileF) +{ + DirectoryWalker().forEachEntry(path, cx, dirStartF, dirEndF, fileF); +} + Directory getFilesAndDirs(const std::wstring& path) { struct Context |
