File tree Expand file tree Collapse file tree
Expand file tree Collapse file tree Original file line number Diff line number Diff line change @@ -18,7 +18,7 @@ io-engine-aio-bindings = "0.1"
1818log = " 0.4"
1919captains-log = " 0"
2020io-buffer = { version =" 1" }
21- crossfire = " 3.1"
21+ crossfire = " >= 3.1.9 "
2222io-uring = " 0.7"
2323embed-collections = { version =" >=0.5" , default-features =false }
2424
Original file line number Diff line number Diff line change 6666//!
6767//! ```rust,ignore
6868//! // In your callback worker thread
69+ //! let (queue_tx, queue_rx) = mpsc::bounded_blocking(1000);
6970//! loop {
70- //! match rx .recv() {
71+ //! match queue_rx .recv() {
7172//! Ok(event) => event.callback_unchecked(true),
7273//! Err(_) => break,
7374//! }
8182//! that requires retry:
8283//!
8384//! ```rust,ignore
84- //! // check_short_read returns true if offset exceeds file end
85- //! event.callback(|offset| {
86- //! // NOTE: you should probably use weak reference here
87- //! offset < file_size
88- //! })
89- //! .unwrap_or_else(|event| {
85+ //! use crossfire::WeakTx;
86+ //! let (queue_tx, queue_rx) = mpsc::bounded_blocking::<Box<IOEvent<_>>>(1000);
87+ //! let weak_tx: WeakTx<_> = queue_tx.downgrade();
88+ //! // use a weak reference of sender to allow the main sender can be drop.
89+ //! // io-engine rely on error of receiver to notify exit.
90+ //! while let Ok() = queue_rx.recv() {
91+ //! // check_short_read returns true if offset exceeds file end
92+ //! if let Err(event_retry) = event.callback(|offset| offset < file_size ) {
9093//! // Short I/O detected, resubmit the event
91- //! queue_tx.send(event).unwrap();
92- //! });
94+ //! if let Some(tx) = weak_tx.upgrade() {
95+ //! tx.send(event_retry).unwrap();
96+ //! } else {
97+ //! event_retry.callback_unchecked(true);
98+ //! }
99+ //! };
100+ //! }
93101//! ```
94102//!
95103//! The closure receives the current offset and should return `true` if the offset
You can’t perform that action at this time.
0 commit comments