Revert "rusticl/queue: gracefully stop the worker thread"

Apparently this code caused issues and the fix was only papering over the
issue, which I now I can't trigger anyway.

This reverts commit 9d458b7fc1.

Fixes: 9d458b7fc1 ("rusticl/queue: gracefully stop the worker thread")
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/30067>
This commit is contained in:
Karol Herbst 2024-07-08 16:34:22 +02:00 committed by Marge Bot
parent cf27fd22c4
commit 47377b550f

View file

@ -10,7 +10,6 @@ use mesa_rust_util::properties::*;
use rusticl_opencl_gen::*;
use std::mem;
use std::mem::ManuallyDrop;
use std::ops::Deref;
use std::sync::mpsc;
use std::sync::Arc;
@ -72,7 +71,7 @@ struct QueueState {
last: Weak<Event>,
// `Sync` on `Sender` was stabilized in 1.72, until then, put it into our Mutex.
// see https://github.com/rust-lang/rust/commit/5f56956b3c7edb9801585850d1f41b0aeb1888ff
chan_in: ManuallyDrop<mpsc::Sender<Vec<Arc<Event>>>>,
chan_in: mpsc::Sender<Vec<Arc<Event>>>,
}
pub struct Queue {
@ -82,7 +81,7 @@ pub struct Queue {
pub props: cl_command_queue_properties,
pub props_v2: Option<Properties<cl_queue_properties>>,
state: Mutex<QueueState>,
thrd: ManuallyDrop<JoinHandle<()>>,
_thrd: JoinHandle<()>,
}
impl_cl_type_trait!(cl_command_queue, Queue, CL_INVALID_COMMAND_QUEUE);
@ -114,9 +113,9 @@ impl Queue {
state: Mutex::new(QueueState {
pending: Vec::new(),
last: Weak::new(),
chan_in: ManuallyDrop::new(tx_q),
chan_in: tx_q,
}),
thrd: ManuallyDrop::new(thread::Builder::new()
_thrd: thread::Builder::new()
.name("rusticl queue thread".into())
.spawn(move || loop {
let r = rx_t.recv();
@ -168,7 +167,7 @@ impl Queue {
flush_events(&mut flushed, &ctx);
})
.unwrap()),
.unwrap(),
}))
}
@ -231,15 +230,5 @@ impl Drop for Queue {
// commands in command_queue.
// TODO: maybe we have to do it on every release?
let _ = self.flush(true);
let state = self.state.get_mut().unwrap();
unsafe {
// disconnect the channel
ManuallyDrop::drop(&mut state.chan_in);
// and now explicitly wait on the thread to quit, because it won't happen implicitly.
ManuallyDrop::take(&mut self.thrd).join().unwrap();
}
}
}