@@ -94,28 +94,29 @@ void pb_event_poll_hook(void) {
9494 pbio_os_run_while_idle ();
9595}
9696
97- // This is used instead of the uint32_t flags used in embedded builds.
98- static sigset_t global_origmask ;
99-
100- uint32_t pbio_os_hook_disable_irq (void ) {
97+ pbio_os_irq_flags_t pbio_os_hook_disable_irq (void ) {
10198 sigset_t sigmask ;
10299 sigfillset (& sigmask );
103- pthread_sigmask (SIG_SETMASK , & sigmask , & global_origmask );
104- return 0 ;
100+
101+ sigset_t origmask ;
102+ pthread_sigmask (SIG_SETMASK , & sigmask , & origmask );
103+ return origmask ;
105104}
106105
107- void pbio_os_hook_enable_irq (uint32_t flags ) {
108- pthread_sigmask (SIG_SETMASK , & global_origmask , NULL );
106+ void pbio_os_hook_enable_irq (pbio_os_irq_flags_t flags ) {
107+ sigset_t origmask = (sigset_t )flags ;
108+ pthread_sigmask (SIG_SETMASK , & origmask , NULL );
109109}
110110
111- void pbio_os_hook_wait_for_interrupt (void ) {
111+ void pbio_os_hook_wait_for_interrupt (pbio_os_irq_flags_t flags ) {
112112 struct timespec timeout = {
113113 .tv_sec = 0 ,
114114 .tv_nsec = 100000 ,
115115 };
116116 // "sleep" with "interrupts" enabled
117+ sigset_t origmask = flags ;
117118 MP_THREAD_GIL_EXIT ();
118- pselect (0 , NULL , NULL , NULL , & timeout , & global_origmask );
119+ pselect (0 , NULL , NULL , NULL , & timeout , & origmask );
119120 MP_THREAD_GIL_ENTER ();
120121}
121122
0 commit comments