@@ -4,7 +4,7 @@ use std::task::{Context, Poll};
44use std:: { fmt, hash, io, marker, mem, ops, pin:: Pin , ptr, rc:: Rc } ;
55
66use ntex_codec:: { Decoder , Encoder } ;
7- use ntex_service:: cfg:: SharedCfg ;
7+ use ntex_service:: cfg:: { Cfg , SharedCfg } ;
88use ntex_util:: { future:: Either , task:: LocalWaker } ;
99
1010use crate :: buf:: Stack ;
@@ -24,7 +24,7 @@ pub struct IoRef(pub(super) Rc<IoState>);
2424
2525pub ( crate ) struct IoState {
2626 filter : FilterPtr ,
27- pub ( super ) cfg : Cell < & ' static IoConfig > ,
27+ pub ( super ) cfg : Cfg < IoConfig > ,
2828 pub ( super ) flags : Cell < Flags > ,
2929 pub ( super ) error : Cell < Option < io:: Error > > ,
3030 pub ( super ) read_task : LocalWaker ,
@@ -65,7 +65,7 @@ impl IoState {
6565 flags. insert ( Flags :: DSP_TIMEOUT ) ;
6666 self . flags . set ( flags) ;
6767 self . dispatch_task . wake ( ) ;
68- log:: trace!( "{}: Timer, notify dispatcher" , self . cfg. get ( ) . tag( ) ) ;
68+ log:: trace!( "{}: Timer, notify dispatcher" , self . cfg. tag( ) ) ;
6969 }
7070 }
7171
@@ -98,7 +98,7 @@ impl IoState {
9898 if !self . flags . get ( ) . is_stopped ( ) {
9999 log:: trace!(
100100 "{}: {:?} Io error {:?} flags: {:?}" ,
101- self . cfg. get ( ) . tag( ) ,
101+ self . cfg. tag( ) ,
102102 ptr:: from_ref( self ) ,
103103 err,
104104 self . flags. get( )
@@ -120,7 +120,7 @@ impl IoState {
120120 if !self . dispatch_task . wake_checked ( ) {
121121 log:: trace!(
122122 "{}: {:?} Dispatcher is not registered, flags: {:?}" ,
123- self . cfg. get ( ) . tag( ) ,
123+ self . cfg. tag( ) ,
124124 ptr:: from_ref( self ) ,
125125 self . flags. get( )
126126 ) ;
@@ -137,7 +137,7 @@ impl IoState {
137137 {
138138 log:: trace!(
139139 "{}: Initiate io shutdown {:?}" ,
140- self . cfg. get ( ) . tag( ) ,
140+ self . cfg. tag( ) ,
141141 self . flags. get( )
142142 ) ;
143143 self . insert_flags ( Flags :: IO_STOPPING_FILTERS ) ;
@@ -147,12 +147,12 @@ impl IoState {
147147
148148 #[ inline]
149149 pub ( super ) fn read_buf ( & self ) -> & BufConfig {
150- self . cfg . get ( ) . read_buf ( )
150+ self . cfg . read_buf ( )
151151 }
152152
153153 #[ inline]
154154 pub ( super ) fn write_buf ( & self ) -> & BufConfig {
155- self . cfg . get ( ) . write_buf ( )
155+ self . cfg . write_buf ( )
156156 }
157157}
158158
@@ -194,7 +194,7 @@ impl Io {
194194 /// Create `Io` instance
195195 pub fn new < I : IoStream , T : Into < SharedCfg > > ( io : I , cfg : T ) -> Self {
196196 let inner = Rc :: new ( IoState {
197- cfg : Cell :: new ( cfg. into ( ) . get :: < IoConfig > ( ) . into_static ( ) ) ,
197+ cfg : cfg. into ( ) . get :: < IoConfig > ( ) ,
198198 filter : FilterPtr :: null ( ) ,
199199 flags : Cell :: new ( Flags :: WR_PAUSED ) ,
200200 error : Cell :: new ( None ) ,
@@ -237,7 +237,7 @@ impl<F> Io<F> {
237237
238238 fn take_io_ref ( & self ) -> IoRef {
239239 let inner = Rc :: new ( IoState {
240- cfg : Cell :: new ( SharedCfg :: default ( ) . get :: < IoConfig > ( ) . into_static ( ) ) ,
240+ cfg : SharedCfg :: default ( ) . get :: < IoConfig > ( ) ,
241241 filter : FilterPtr :: null ( ) ,
242242 flags : Cell :: new (
243243 Flags :: IO_STOPPED | Flags :: IO_STOPPING | Flags :: IO_STOPPING_FILTERS ,
@@ -278,9 +278,9 @@ impl<F> Io<F> {
278278 #[ inline]
279279 /// Set shared io config
280280 pub fn set_config < T : Into < SharedCfg > > ( & self , cfg : T ) {
281- self . st ( )
282- . cfg
283- . set ( cfg . into ( ) . get :: < IoConfig > ( ) . into_static ( ) ) ;
281+ unsafe {
282+ self . st ( ) . cfg . replace ( cfg . into ( ) . get :: < IoConfig > ( ) ) ;
283+ }
284284 }
285285}
286286
@@ -708,7 +708,7 @@ impl<F> Drop for Io<F> {
708708 if !st. flags . get ( ) . is_stopped ( ) {
709709 log:: trace!(
710710 "{}: Io is dropped, force stopping io streams {:?}" ,
711- st. cfg. get ( ) . tag( ) ,
711+ st. cfg. tag( ) ,
712712 st. flags. get( )
713713 ) ;
714714 }
0 commit comments