File tree Expand file tree Collapse file tree 2 files changed +13
-11
lines changed Expand file tree Collapse file tree 2 files changed +13
-11
lines changed Original file line number Diff line number Diff line change
1
+ //! # FIXES:
2
+ //! The number is identical to the number in the GitHub issue tracker
3
+ //!
4
+ //! ## FIX ISSUE #5
5
+ //! See: https://github.com/PacktPublishing/Asynchronous-Programming-in-Rust/issues/5
6
+ //! Readers reported wrong results when running the example on ARM64 instruction set
7
+ //! (aarch64). The reason turned out to be that the `Event` struct is only `repr(packed)`
8
+ //! on `x86-64` systems due to backwards compatibility. Fixed by conditionally
9
+ //! compiling the #[repr(packed)] attribute.
10
+
1
11
pub const EPOLL_CTL_ADD : i32 = 1 ;
2
12
pub const EPOLLIN : i32 = 0x1 ;
3
13
pub const EPOLLET : i32 = 1 << 31 ;
@@ -11,17 +21,9 @@ extern "C" {
11
21
}
12
22
13
23
#[ derive( Debug ) ]
14
- #[ cfg( not( target_arch = "aarch64" ) ) ]
15
- #[ repr( C , packed) ]
16
- pub struct Event {
17
- pub ( crate ) events : u32 ,
18
- // Token to identify event
19
- pub ( crate ) epoll_data : usize ,
20
- }
21
-
22
- #[ derive( Debug ) ]
23
- #[ cfg( target_arch = "aarch64" ) ]
24
24
#[ repr( C ) ]
25
+ // FIX #5
26
+ #[ cfg_attr( target_arch = "x86_64" , repr( packed) ) ]
25
27
pub struct Event {
26
28
pub ( crate ) events : u32 ,
27
29
// Token to identify event
Original file line number Diff line number Diff line change @@ -49,7 +49,7 @@ fn handle_events(
49
49
50
50
loop {
51
51
match streams[ index] . read ( & mut data) {
52
- Ok ( 0 ) => {
52
+ Ok ( n ) if n == 0 => {
53
53
// FIX #4
54
54
// `insert` returns false if the value already existed in the set. We
55
55
// handle it here since we must be sure that the TcpStream is fully
You can’t perform that action at this time.
0 commit comments