Skip to content

Commit c248bf6

Browse files
authored
fix(driver): erase op type in driver (#348)
1 parent cedd001 commit c248bf6

File tree

7 files changed

+17
-20
lines changed

7 files changed

+17
-20
lines changed

compio-driver/src/fusion/mod.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -63,14 +63,14 @@ impl Driver {
6363
}
6464
}
6565

66-
pub fn cancel<T: OpCode>(&mut self, op: Key<T>) {
66+
pub fn cancel(&mut self, op: &mut Key<dyn OpCode>) {
6767
match &mut self.fuse {
6868
FuseDriver::Poll(driver) => driver.cancel(op),
6969
FuseDriver::IoUring(driver) => driver.cancel(op),
7070
}
7171
}
7272

73-
pub fn push<T: OpCode + 'static>(&mut self, op: &mut Key<T>) -> Poll<io::Result<usize>> {
73+
pub fn push(&mut self, op: &mut Key<dyn OpCode>) -> Poll<io::Result<usize>> {
7474
match &mut self.fuse {
7575
FuseDriver::Poll(driver) => driver.push(op),
7676
FuseDriver::IoUring(driver) => driver.push(op),

compio-driver/src/iocp/mod.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -223,7 +223,7 @@ impl Driver {
223223
self.port.attach(fd)
224224
}
225225

226-
pub fn cancel<T: OpCode>(&mut self, mut op: Key<T>) {
226+
pub fn cancel(&mut self, op: &mut Key<dyn OpCode>) {
227227
instrument!(compio_log::Level::TRACE, "cancel", ?op);
228228
trace!("cancel RawOp");
229229
let overlapped_ptr = op.as_mut_ptr();
@@ -240,7 +240,7 @@ impl Driver {
240240
unsafe { op.cancel(overlapped_ptr.cast()) }.ok();
241241
}
242242

243-
pub fn push<T: OpCode + 'static>(&mut self, op: &mut Key<T>) -> Poll<io::Result<usize>> {
243+
pub fn push(&mut self, op: &mut Key<dyn OpCode>) -> Poll<io::Result<usize>> {
244244
instrument!(compio_log::Level::TRACE, "push", ?op);
245245
let user_data = op.user_data();
246246
trace!("push RawOp");

compio-driver/src/iocp/wait/packet.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ use windows_sys::Win32::Foundation::{
1010
STATUS_SUCCESS,
1111
};
1212

13-
use crate::{Key, RawFd, sys::cp};
13+
use crate::{Key, OpCode, RawFd, sys::cp};
1414

1515
extern "system" {
1616
fn NtCreateWaitCompletionPacket(
@@ -52,7 +52,7 @@ fn check_status(status: NTSTATUS) -> io::Result<()> {
5252
}
5353

5454
impl Wait {
55-
pub fn new<T>(port: &cp::Port, event: RawFd, op: &mut Key<T>) -> io::Result<Self> {
55+
pub fn new(port: &cp::Port, event: RawFd, op: &mut Key<dyn OpCode>) -> io::Result<Self> {
5656
let mut handle = 0;
5757
check_status(unsafe {
5858
NtCreateWaitCompletionPacket(&mut handle, GENERIC_READ | GENERIC_WRITE, null_mut())

compio-driver/src/iocp/wait/thread_pool.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ pub struct Wait {
1818
}
1919

2020
impl Wait {
21-
pub fn new<T>(port: &cp::Port, event: RawFd, op: &mut Key<T>) -> io::Result<Self> {
21+
pub fn new(port: &cp::Port, event: RawFd, op: &mut Key<dyn OpCode>) -> io::Result<Self> {
2222
let port = port.handle();
2323
let mut context = Box::new(WinThreadpoolWaitContext {
2424
port,

compio-driver/src/iour/mod.rs

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -189,7 +189,7 @@ impl Driver {
189189
Ok(())
190190
}
191191

192-
pub fn cancel<T>(&mut self, op: Key<T>) {
192+
pub fn cancel(&mut self, op: &mut Key<dyn crate::sys::OpCode>) {
193193
instrument!(compio_log::Level::TRACE, "cancel", ?op);
194194
trace!("cancel RawOp");
195195
unsafe {
@@ -235,10 +235,7 @@ impl Driver {
235235
}
236236
}
237237

238-
pub fn push<T: crate::sys::OpCode + 'static>(
239-
&mut self,
240-
op: &mut Key<T>,
241-
) -> Poll<io::Result<usize>> {
238+
pub fn push(&mut self, op: &mut Key<dyn crate::sys::OpCode>) -> Poll<io::Result<usize>> {
242239
instrument!(compio_log::Level::TRACE, "push", ?op);
243240
let user_data = op.user_data();
244241
let op_pin = op.as_op_pin();

compio-driver/src/lib.rs

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -259,7 +259,8 @@ impl Proactor {
259259
// SAFETY: completed.
260260
Some(unsafe { op.into_inner() })
261261
} else {
262-
self.driver.cancel(op);
262+
self.driver
263+
.cancel(&mut unsafe { Key::<dyn OpCode>::new_unchecked(op.user_data()) });
263264
None
264265
}
265266
}
@@ -268,7 +269,10 @@ impl Proactor {
268269
/// user-defined data, associated with it.
269270
pub fn push<T: OpCode + 'static>(&mut self, op: T) -> PushEntry<Key<T>, BufResult<usize, T>> {
270271
let mut op = self.driver.create_op(op);
271-
match self.driver.push(&mut op) {
272+
match self
273+
.driver
274+
.push(&mut unsafe { Key::<dyn OpCode>::new_unchecked(op.user_data()) })
275+
{
272276
Poll::Pending => PushEntry::Pending(op),
273277
Poll::Ready(res) => {
274278
op.set_result(res);

compio-driver/src/poll/mod.rs

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -219,11 +219,10 @@ impl Driver {
219219
Ok(())
220220
}
221221

222-
pub fn cancel<T: crate::sys::OpCode>(&mut self, op: Key<T>) {
222+
pub fn cancel(&mut self, op: &mut Key<dyn crate::sys::OpCode>) {
223223
self.cancelled.insert(op.user_data());
224224
#[cfg(aio)]
225225
{
226-
let mut op = op;
227226
let op = op.as_op_pin();
228227
if let Some(OpType::Aio(aiocbp)) = op.op_type() {
229228
let aiocb = unsafe { aiocbp.as_ref() };
@@ -233,10 +232,7 @@ impl Driver {
233232
}
234233
}
235234

236-
pub fn push<T: crate::sys::OpCode + 'static>(
237-
&mut self,
238-
op: &mut Key<T>,
239-
) -> Poll<io::Result<usize>> {
235+
pub fn push(&mut self, op: &mut Key<dyn crate::sys::OpCode>) -> Poll<io::Result<usize>> {
240236
instrument!(compio_log::Level::TRACE, "push", ?op);
241237
let user_data = op.user_data();
242238
let op_pin = op.as_op_pin();

0 commit comments

Comments
 (0)