@@ -29,6 +29,7 @@ use crate::dns::host::DnsHost;
2929use crate :: dns:: DnsResolver ;
3030use crate :: filesystem:: host:: FilesystemHost ;
3131use crate :: filesystem:: VirtualFileMap ;
32+ use crate :: signals:: host:: SignalsHost ;
3233
3334/// Per-instance host state.
3435///
@@ -39,8 +40,8 @@ pub struct HostState {
3940 pub filesystem : Option < FilesystemHost > ,
4041 pub dns : Option < DnsHost > ,
4142 pub db_proxy : Option < DbProxyHost > ,
42- /// Pending signal queue (FIFO) .
43- pub signal_queue : Vec < shim :: signals:: SignalType > ,
43+ /// Signal handling: interest registration, bounded queue, and filtering .
44+ pub signals : SignalsHost ,
4445 /// Declared threading model (set by guest).
4546 pub threading_model : Option < shim:: threading:: ThreadingModel > ,
4647 /// Optional resource limiter for memory/table enforcement.
@@ -94,16 +95,11 @@ impl shim::dns::Host for HostState {
9495
9596impl shim:: signals:: Host for HostState {
9697 fn on_signal ( & mut self , signal : shim:: signals:: SignalType ) -> Result < ( ) , String > {
97- self . signal_queue . push ( signal) ;
98- Ok ( ( ) )
98+ self . signals . on_signal ( signal)
9999 }
100100
101101 fn poll_signal ( & mut self ) -> Option < shim:: signals:: SignalType > {
102- if self . signal_queue . is_empty ( ) {
103- None
104- } else {
105- Some ( self . signal_queue . remove ( 0 ) )
106- }
102+ self . signals . poll_signal ( )
107103 }
108104}
109105
@@ -273,7 +269,7 @@ impl WarpGridEngine {
273269 filesystem,
274270 dns,
275271 db_proxy,
276- signal_queue : Vec :: new ( ) ,
272+ signals : SignalsHost :: new ( ) ,
277273 threading_model : None ,
278274 limiter : None ,
279275 }
@@ -341,7 +337,7 @@ mod tests {
341337 filesystem : None ,
342338 dns : None ,
343339 db_proxy : None ,
344- signal_queue : Vec :: new ( ) ,
340+ signals : SignalsHost :: new ( ) ,
345341 threading_model : None ,
346342 limiter : None ,
347343 } ;
@@ -355,19 +351,25 @@ mod tests {
355351 }
356352
357353 #[ test]
358- fn signal_queue_fifo ( ) {
354+ fn signal_fifo ( ) {
359355 let mut state = HostState {
360356 filesystem : None ,
361357 dns : None ,
362358 db_proxy : None ,
363- signal_queue : Vec :: new ( ) ,
359+ signals : SignalsHost :: new ( ) ,
364360 threading_model : None ,
365361 limiter : None ,
366362 } ;
367363
364+ // Register interest in both signal types via the Host trait
368365 shim:: signals:: Host :: on_signal ( & mut state, shim:: signals:: SignalType :: Terminate ) . unwrap ( ) ;
369366 shim:: signals:: Host :: on_signal ( & mut state, shim:: signals:: SignalType :: Hangup ) . unwrap ( ) ;
370367
368+ // Deliver signals via the host-side API
369+ state. signals . deliver_signal ( shim:: signals:: SignalType :: Terminate ) ;
370+ state. signals . deliver_signal ( shim:: signals:: SignalType :: Hangup ) ;
371+
372+ // Poll via the Host trait — should return FIFO order
371373 assert_eq ! (
372374 shim:: signals:: Host :: poll_signal( & mut state) ,
373375 Some ( shim:: signals:: SignalType :: Terminate )
@@ -392,7 +394,7 @@ mod tests {
392394 filesystem : None ,
393395 dns : None ,
394396 db_proxy : None ,
395- signal_queue : Vec :: new ( ) ,
397+ signals : SignalsHost :: new ( ) ,
396398 threading_model : None ,
397399 limiter : None ,
398400 } ;
0 commit comments