@@ -7,6 +7,18 @@ macro_rules! define_handles {
77 ' owned: $( $oty: ident, ) *
88 ' interned: $( $ity: ident, ) *
99 ) => {
10+ static COUNTERS : HandleCounters = HandleCounters {
11+ $( $oty: AtomicUsize :: new( 1 ) , ) *
12+ $( $ity: AtomicUsize :: new( 1 ) , ) *
13+ } ;
14+
15+ #[ repr( C ) ]
16+ #[ allow( non_snake_case) ]
17+ struct HandleCounters {
18+ $( $oty: AtomicUsize , ) *
19+ $( $ity: AtomicUsize , ) *
20+ }
21+
1022 #[ repr( C ) ]
1123 #[ allow( non_snake_case) ]
1224 struct HandleStore <S : Types > {
@@ -15,10 +27,10 @@ macro_rules! define_handles {
1527 }
1628
1729 impl <S : Types > HandleStore <S > {
18- fn new( handle_counters : & ' static client :: HandleCounters ) -> Self {
30+ fn new( ) -> Self {
1931 HandleStore {
20- $( $oty: handle:: OwnedStore :: new( & handle_counters . $oty) , ) *
21- $( $ity: handle:: InternedStore :: new( & handle_counters . $ity) , ) *
32+ $( $oty: handle:: OwnedStore :: new( & COUNTERS . $oty) , ) *
33+ $( $ity: handle:: InternedStore :: new( & COUNTERS . $ity) , ) *
2234 }
2335 }
2436 }
@@ -330,14 +342,13 @@ fn run_server<
330342 O : for < ' a , ' s > DecodeMut < ' a , ' s , HandleStore < MarkedTypes < S > > > ,
331343> (
332344 strategy : & impl ExecutionStrategy ,
333- handle_counters : & ' static client:: HandleCounters ,
334345 server : S ,
335346 input : I ,
336347 run_client : extern "C" fn ( Bridge < ' _ > ) -> Buffer ,
337348 force_show_panics : bool ,
338349) -> Result < O , PanicMessage > {
339350 let mut dispatcher =
340- Dispatcher { handle_store : HandleStore :: new ( handle_counters ) , server : MarkedTypes ( server) } ;
351+ Dispatcher { handle_store : HandleStore :: new ( ) , server : MarkedTypes ( server) } ;
341352
342353 let mut buf = Buffer :: new ( ) ;
343354 input. encode ( & mut buf, & mut dispatcher. handle_store ) ;
@@ -355,10 +366,9 @@ impl client::Client<crate::TokenStream, crate::TokenStream> {
355366 input : S :: TokenStream ,
356367 force_show_panics : bool ,
357368 ) -> Result < S :: TokenStream , PanicMessage > {
358- let client:: Client { get_handle_counters , run, _marker } = * self ;
369+ let client:: Client { run, _marker } = * self ;
359370 run_server (
360371 strategy,
361- get_handle_counters ( ) ,
362372 server,
363373 <MarkedTypes < S > as Types >:: TokenStream :: mark ( input) ,
364374 run,
@@ -377,10 +387,9 @@ impl client::Client<(crate::TokenStream, crate::TokenStream), crate::TokenStream
377387 input2 : S :: TokenStream ,
378388 force_show_panics : bool ,
379389 ) -> Result < S :: TokenStream , PanicMessage > {
380- let client:: Client { get_handle_counters , run, _marker } = * self ;
390+ let client:: Client { run, _marker } = * self ;
381391 run_server (
382392 strategy,
383- get_handle_counters ( ) ,
384393 server,
385394 (
386395 <MarkedTypes < S > as Types >:: TokenStream :: mark ( input) ,
0 commit comments