summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorzy <[email protected]>2023-09-20 08:23:04 +0000
committerzy <[email protected]>2023-09-20 08:23:04 +0000
commitf83a1b92fabb2005791f76eec9fb58e8b4ecc0cd (patch)
tree61cdd8785a6cfaebd46de30264e555283f6bb2a0
parent5fad62b7f916f14556a264e4d065cf57ebeb90af (diff)
- 简化 TimeoutSItFlag
- 修正 TimeoutSIt 实例申请 bug (Box::into_raw)
-rw-r--r--src/timeout.rs27
1 files changed, 10 insertions, 17 deletions
diff --git a/src/timeout.rs b/src/timeout.rs
index ae04060..9dd050f 100644
--- a/src/timeout.rs
+++ b/src/timeout.rs
@@ -101,34 +101,28 @@ impl Drop for Timeout {
}
pub enum TimeoutSItFlag {
- PENDING,
- EXPIRED,
- ALL,
- CLEAR,
+ PENDING = TIMEOUTS_PENDING as isize,
+ EXPIRED = TIMEOUTS_EXPIRED as isize,
+ ALL = TIMEOUTS_ALL as isize,
+ CLEAR = TIMEOUTS_CLEAR as isize,
}
// as i32
impl From<TimeoutSItFlag> for i32 {
fn from(flag: TimeoutSItFlag) -> Self {
- match flag {
- TimeoutSItFlag::PENDING => TIMEOUTS_PENDING,
- TimeoutSItFlag::EXPIRED => TIMEOUTS_EXPIRED,
- TimeoutSItFlag::ALL => TIMEOUTS_ALL,
- TimeoutSItFlag::CLEAR => TIMEOUTS_CLEAR,
- }
+ flag as i32
}
}
pub struct TimeoutSIt {
- raw: NonNull<*mut timeouts_it>,
+ raw: NonNull<timeouts_it>,
}
impl TimeoutSIt {
/// flag has 4 value: PENDING, EXPIRED, ALL, CLEAR
fn new(flags: TimeoutSItFlag) -> Result<TimeoutSIt, &'static str> {
- let mut instance = timeouts_it::default();
- TIMEOUTS_IT_INIT(&mut instance, flags as i32);
- let raw = NonNull::new(&mut instance as *mut timeouts_it as *mut *mut timeouts_it)
- .ok_or("Failed to create TimeoutSIt")?;
+ let mut instance = Box::into_raw(Box::new(timeouts_it::default()));
+ TIMEOUTS_IT_INIT(instance, flags as i32);
+ let raw = NonNull::new(instance).ok_or("Failed to create TimeoutSIt")?;
Ok(TimeoutSIt { raw })
}
}
@@ -228,8 +222,7 @@ impl TimeoutManager {
}
/// return next timeout as timeout_sit requested, or NULL if none
pub fn next_timeout(&mut self, timeout_sit: &TimeoutSIt) -> Option<Timeout> {
- let to: *mut timeout =
- unsafe { timeouts_next(self.get_raw(), timeout_sit.raw.as_ref().clone()) };
+ let to: *mut timeout = unsafe { timeouts_next(self.get_raw(), timeout_sit.raw.as_ptr()) };
if to.is_null() {
return None;
}