@@ -99,50 +99,29 @@ class CFileDvdRequest : public IDvdRequest {
9999 ESeekOrigin m_whence;
100100 int m_offset;
101101
102- #ifdef HAS_DVD_THREAD
103- std::atomic_bool m_cancel = {false };
104- std::atomic_bool m_complete = {false };
105- #else
102+
106103 bool m_cancel = false ;
107104 bool m_complete = false ;
108- # endif
105+
109106 std::function<void (u32 )> m_callback;
110107
111108public:
112109 ~CFileDvdRequest () override { CFileDvdRequest::PostCancelRequest (); }
113110
114111 void WaitUntilComplete () override {
115- #ifdef HAS_DVD_THREAD
116- while (!m_complete.load () && !m_cancel.load ()) {
117- std::unique_lock lk{CDvdFile::m_WaitMutex};
118- }
119- #else
112+
120113 if (!m_complete && !m_cancel) {
121114 CDvdFile::DoWork ();
122115 }
123- #endif
124116 }
125117 bool IsComplete () override {
126- #ifdef HAS_DVD_THREAD
127- return m_complete.load ();
128- #else
118+
129119 if (!m_complete) {
130120 CDvdFile::DoWork ();
131121 }
132122 return m_complete;
133- #endif
134- }
135- void PostCancelRequest () override {
136- #ifdef HAS_DVD_THREAD
137- if (m_complete.load () || m_cancel.load ()) {
138- return ;
139- }
140- std::unique_lock waitlk{CDvdFile::m_WaitMutex};
141- m_cancel.store (true );
142- #else
143- m_cancel = true ;
144- #endif
145123 }
124+ void PostCancelRequest () override { m_cancel = true ; }
146125
147126 [[nodiscard]] EMediaType GetMediaType () const override { return EMediaType::File; }
148127
@@ -157,22 +136,13 @@ class CFileDvdRequest : public IDvdRequest {
157136 , m_callback(std::move(cb)) {}
158137
159138 void DoRequest () {
160- #ifdef HAS_DVD_THREAD
161- if (m_cancel.load ()) {
162- return ;
163- }
164- #else
165139 if (m_cancel) {
166140 return ;
167141 }
168- #endif
169142
170143 if (!m_reader) {
171- #ifdef HAS_DVD_THREAD
172- m_complete.store (true );
173- #else
144+
174145 m_complete = true ;
175- #endif
176146 if (m_callback) {
177147 m_callback (0 );
178148 }
@@ -209,21 +179,10 @@ class CFileDvdRequest : public IDvdRequest {
209179 if (m_callback) {
210180 m_callback (readLen);
211181 }
212- #ifdef HAS_DVD_THREAD
213- m_complete.store (true );
214- #else
215182 m_complete = true ;
216- #endif
217183 }
218184};
219185
220- #ifdef HAS_DVD_THREAD
221- std::thread CDvdFile::m_WorkerThread;
222- std::mutex CDvdFile::m_WorkerMutex;
223- std::condition_variable CDvdFile::m_WorkerCV;
224- std::mutex CDvdFile::m_WaitMutex;
225- std::atomic_bool CDvdFile::m_WorkerRun = {false };
226- #endif
227186std::vector<std::shared_ptr<IDvdRequest>> CDvdFile::m_RequestQueue;
228187std::string CDvdFile::m_rootDirectory;
229188std::unique_ptr<u8 []> CDvdFile::m_dolBuf;
@@ -252,44 +211,10 @@ void CDvdFile::DoWork() {
252211 m_RequestQueue.clear ();
253212}
254213
255- void CDvdFile::WorkerProc () {
256- #ifdef HAS_DVD_THREAD
257- // OPTICK_THREAD("CDvdFile");
258-
259- while (m_WorkerRun.load ()) {
260- std::unique_lock lk{m_WorkerMutex};
261- while (!m_RequestQueue.empty ()) {
262- std::vector<std::shared_ptr<IDvdRequest>> swapQueue;
263- swapQueue.swap (m_RequestQueue);
264- lk.unlock ();
265- std::unique_lock waitlk{m_WaitMutex};
266- for (std::shared_ptr<IDvdRequest>& req : swapQueue) {
267- auto & concreteReq = static_cast <CFileDvdRequest&>(*req);
268- concreteReq.DoRequest ();
269- }
270- waitlk.unlock ();
271- swapQueue.clear ();
272- lk.lock ();
273- }
274- if (!m_WorkerRun.load ()) {
275- break ;
276- }
277- m_WorkerCV.wait (lk);
278- }
279- #endif
280- }
281-
282214std::shared_ptr<IDvdRequest> CDvdFile::AsyncSeekRead (void * buf, u32 len, ESeekOrigin whence, int off,
283215 std::function<void (u32 )>&& cb) {
284216 std::shared_ptr<IDvdRequest> ret = std::make_shared<CFileDvdRequest>(*this , buf, len, whence, off, std::move (cb));
285- #ifdef HAS_DVD_THREAD
286- std::unique_lock lk{m_WorkerMutex};
287- #endif
288217 m_RequestQueue.emplace_back (ret);
289- #ifdef HAS_DVD_THREAD
290- lk.unlock ();
291- m_WorkerCV.notify_one ();
292- #endif
293218 return ret;
294219}
295220
@@ -443,12 +368,6 @@ bool CDvdFile::LoadDolBuf() {
443368}
444369
445370bool CDvdFile::Initialize (const std::string_view& path) {
446- #ifdef HAS_DVD_THREAD
447- if (m_WorkerRun.load ()) {
448- return true ;
449- }
450- #endif
451-
452371 Shutdown ();
453372
454373 std::string pathStr (path);
@@ -494,23 +413,10 @@ bool CDvdFile::Initialize(const std::string_view& path) {
494413 return false ;
495414 }
496415
497- #ifdef HAS_DVD_THREAD
498- m_WorkerRun.store (true );
499- m_WorkerThread = std::thread (WorkerProc);
500- #endif
501416 return true ;
502417}
503418
504419void CDvdFile::Shutdown () {
505- #ifdef HAS_DVD_THREAD
506- if (m_WorkerRun.load ()) {
507- m_WorkerRun.store (false );
508- m_WorkerCV.notify_one ();
509- if (m_WorkerThread.joinable ()) {
510- m_WorkerThread.join ();
511- }
512- }
513- #endif
514420 m_RequestQueue.clear ();
515421 m_FileEntries.clear ();
516422 m_dolBuf.reset ();
0 commit comments