Skip to content

Commit f46366d

Browse files
fix: fix a rarely occuring panic when upgrading backend server HTTP
connection
1 parent ba9935e commit f46366d

File tree

2 files changed

+2
-2
lines changed

2 files changed

+2
-2
lines changed

ferron-modules-builtin/src/util/send_net_io/tcp_stream_poll.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -106,7 +106,7 @@ impl SendTcpStreamPoll {
106106
#[inline]
107107
fn populate_if_different_thread_or_marked_dropped(&mut self, dropped: bool) {
108108
let current_thread_id = std::thread::current().id();
109-
let marked_dropped = !dropped && self.marked_dropped.swap(false, Ordering::Relaxed);
109+
let marked_dropped = !dropped && self.marked_dropped.swap(false, Ordering::Relaxed) && self.prev_inner.is_none();
110110
if marked_dropped || current_thread_id != self.thread_id {
111111
if !self.obtained_dropped {
112112
panic!("the TcpStreamPoll can be used only once if drop guard is not obtained")

ferron-modules-builtin/src/util/send_net_io/unix_stream_poll.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,7 @@ impl SendUnixStreamPoll {
7171
#[inline]
7272
fn populate_if_different_thread_or_marked_dropped(&mut self, dropped: bool) {
7373
let current_thread_id = std::thread::current().id();
74-
let marked_dropped = !dropped && self.marked_dropped.swap(false, Ordering::Relaxed);
74+
let marked_dropped = !dropped && self.marked_dropped.swap(false, Ordering::Relaxed) && self.prev_inner.is_none();
7575
if marked_dropped || current_thread_id != self.thread_id {
7676
if !self.obtained_dropped {
7777
panic!("the UnixStreamPoll can be used only once if drop guard is not obtained")

0 commit comments

Comments
 (0)