Changeset 3480:4e3826267412 in roaraudio for libroarpulse/mainloop-signal.c
- Timestamp:
- 02/14/10 05:31:56 (14 years ago)
- Branch:
- default
- Phase:
- public
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
libroarpulse/mainloop-signal.c
r3473 r3480 55 55 pa_mainloop_api * api; 56 56 pa_signal_event sig[MAX_SIG]; 57 int pipefh[2]; 58 pa_io_event * io_event; 57 59 } _roar_pa_signal; 58 60 59 61 static void _roar_pa_signal_handler (int sig) { 60 pa_signal_event * e; 62 write(_roar_pa_signal.pipefh[1], &sig, sizeof(sig)); 63 } 61 64 62 ROAR_DBG("_roar_pa_signal_handler(sig=%s(%i)) = ?", strsignal(sig), sig); 65 static void _roar_pa_signal_iocb(pa_mainloop_api * a, 66 pa_io_event * e, 67 int fd, 68 pa_io_event_flags_t f, 69 void *userdata ) { 70 pa_signal_event * se; 71 int sig; 72 size_t ret; 73 74 ret = read(fd, &sig, sizeof(sig)); 75 76 if ( ret != sizeof(sig) ) 77 return; 63 78 64 79 if ( sig >= MAX_SIG ) 65 80 return; 66 81 67 e = &(_roar_pa_signal.sig[sig]);82 se = &(_roar_pa_signal.sig[sig]); 68 83 69 if ( ! e->used )84 if ( !se->used ) 70 85 return; 71 86 72 ROAR_DBG("_roar_pa_signal_handler(sig=%s(%i)): signal is used", strsignal(sig), sig); 73 74 ROAR_DBG("_roar_pa_signal_handler(sig=%s(%i)): callback at %p", strsignal(sig), sig, e->cb); 75 76 ROAR_DBG("_roar_pa_signal_handler(sig=%s(%i)): api=%p, userdata=%p", strsignal(sig), sig, _roar_pa_signal.api, e->userdata); 77 78 if ( e->cb != NULL ) 79 e->cb(_roar_pa_signal.api, e, sig, e->userdata); 80 81 ROAR_DBG("_roar_pa_signal_handler(sig=%s(%i)) = (void)", strsignal(sig), sig); 87 if ( se->cb != NULL ) 88 se->cb(_roar_pa_signal.api, se, sig, se->userdata); 82 89 } 83 90 … … 92 99 _roar_pa_signal.api = api; 93 100 101 if ( pipe(_roar_pa_signal.pipefh) == -1 ) 102 return -1; 103 104 _roar_pa_signal.io_event = api->io_new(api, _roar_pa_signal.pipefh[0], PA_IO_EVENT_INPUT, _roar_pa_signal_iocb, NULL); 105 94 106 _roar_pa_signal_inited = 1; 95 107 … … 99 111 /** Cleanup the signal subsystem */ 100 112 void pa_signal_done(void) { 113 int i; 114 115 for (i = 0; i < MAX_SIG; i++) { 116 _roar_pa_signal.sig[i].used = 0; 117 } 118 119 _roar_pa_signal.api->io_free(_roar_pa_signal.io_event); 120 101 121 _roar_pa_signal_inited = 0; 102 122 }
Note: See TracChangeset
for help on using the changeset viewer.