diff options
author | Holger Freyther <zecke@selfish.org> | 2009-02-14 22:51:10 +0000 |
---|---|---|
committer | Holger Freyther <zecke@selfish.org> | 2009-02-14 22:51:10 +0000 |
commit | e4b3fa3633d0d68c17d77f7d2669f8671332ff1f (patch) | |
tree | bf557b81da986b035e2d6c3e5bc261bf2e7b818c | |
parent | 053e09d102e07441974dd65b1a55e08991bf0857 (diff) |
[signal] Move the area into the struct signal_data...
Remove the parameter and move the signal kind into the
signal struct. Make register/deregister fully symmetric.
-rw-r--r-- | include/openbsc/signal.h | 5 | ||||
-rw-r--r-- | src/gsm_04_08.c | 5 | ||||
-rw-r--r-- | src/paging.c | 5 | ||||
-rw-r--r-- | src/signal.c | 9 |
4 files changed, 16 insertions, 8 deletions
diff --git a/include/openbsc/signal.h b/include/openbsc/signal.h index 6a0d6fb90..eb4fc8d8f 100644 --- a/include/openbsc/signal.h +++ b/include/openbsc/signal.h @@ -32,6 +32,7 @@ struct signal_data { + int area; }; @@ -48,10 +49,10 @@ struct paging_signal_data { /* Management */ void register_signal_handler(int areas, int (*sig)(struct signal_data *, void *data), void *data); -void remove_signal_handler(int (*sig)(struct signal_data *, void *data), void *data); +void remove_signal_handler(int areas, int (*sig)(struct signal_data *, void *data), void *data); /* Dispatch */ -void dispatch_signal(int area, struct signal_data *data); +void dispatch_signal(struct signal_data *data); #endif diff --git a/src/gsm_04_08.c b/src/gsm_04_08.c index 67766321e..4d77d5dd8 100644 --- a/src/gsm_04_08.c +++ b/src/gsm_04_08.c @@ -701,11 +701,14 @@ static int gsm48_rr_rx_pag_resp(struct msgb *msg) subscr->name ? subscr->name : subscr->imsi); struct paging_signal_data sig_data = { + .data = { + .area = S_PAGING, + }, .subscr = subscr, .bts = msg->lchan->ts->trx->bts, .lchan = msg->lchan, }; - dispatch_signal(S_PAGING, &sig_data.data); + dispatch_signal(&sig_data.data); paging_request_stop(msg->trx->bts, subscr); if (!msg->lchan->subscr) diff --git a/src/paging.c b/src/paging.c index 761facde8..c7fccad1e 100644 --- a/src/paging.c +++ b/src/paging.c @@ -185,12 +185,15 @@ static void paging_T3113_expired(void *data) req, req->subscr->imsi); struct paging_signal_data sig_data = { + .data = { + .area = S_PAGING, + }, .subscr = req->subscr, .bts = req->bts, .lchan = NULL, }; - dispatch_signal(S_PAGING, &sig_data.data); + dispatch_signal(&sig_data.data); paging_remove_request(&req->bts->paging, req); } diff --git a/src/signal.c b/src/signal.c index d4a4a7ce2..ea0067256 100644 --- a/src/signal.c +++ b/src/signal.c @@ -48,12 +48,13 @@ void register_signal_handler(int areas, llist_add_tail(&signal_handler_list, &sig_data->entry); } -void remove_signal_handler(int (*sig_handler)(struct signal_data *, void *), void *data) +void remove_signal_handler(int areas, int (*sig_handler)(struct signal_data *, void *), void *data) { struct signal_handler *handler; llist_for_each_entry(handler, &signal_handler_list, entry) { - if (handler->sig_handler == sig_handler && handler->data == data) { + if (handler->sig_handler == sig_handler + && handler->data == data && areas == handler->areas) { llist_del(&handler->entry); free(handler); break; @@ -62,12 +63,12 @@ void remove_signal_handler(int (*sig_handler)(struct signal_data *, void *), voi } -void dispatch_signal(int area, struct signal_data *data) +void dispatch_signal(struct signal_data *data) { struct signal_handler *handler; llist_for_each_entry(handler, &signal_handler_list, entry) { - if (handler->areas & area) { + if (handler->areas & data->area) { (*handler->sig_handler)(data, handler->data); } } |