[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.
This commit is contained in:
parent
053e09d102
commit
e4b3fa3633
|
@ -32,6 +32,7 @@
|
||||||
|
|
||||||
|
|
||||||
struct signal_data {
|
struct signal_data {
|
||||||
|
int area;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
@ -48,10 +49,10 @@ struct paging_signal_data {
|
||||||
|
|
||||||
/* Management */
|
/* Management */
|
||||||
void register_signal_handler(int areas, int (*sig)(struct signal_data *, void *data), void *data);
|
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 */
|
/* Dispatch */
|
||||||
void dispatch_signal(int area, struct signal_data *data);
|
void dispatch_signal(struct signal_data *data);
|
||||||
|
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -701,11 +701,14 @@ static int gsm48_rr_rx_pag_resp(struct msgb *msg)
|
||||||
subscr->name ? subscr->name : subscr->imsi);
|
subscr->name ? subscr->name : subscr->imsi);
|
||||||
|
|
||||||
struct paging_signal_data sig_data = {
|
struct paging_signal_data sig_data = {
|
||||||
|
.data = {
|
||||||
|
.area = S_PAGING,
|
||||||
|
},
|
||||||
.subscr = subscr,
|
.subscr = subscr,
|
||||||
.bts = msg->lchan->ts->trx->bts,
|
.bts = msg->lchan->ts->trx->bts,
|
||||||
.lchan = msg->lchan,
|
.lchan = msg->lchan,
|
||||||
};
|
};
|
||||||
dispatch_signal(S_PAGING, &sig_data.data);
|
dispatch_signal(&sig_data.data);
|
||||||
paging_request_stop(msg->trx->bts, subscr);
|
paging_request_stop(msg->trx->bts, subscr);
|
||||||
|
|
||||||
if (!msg->lchan->subscr)
|
if (!msg->lchan->subscr)
|
||||||
|
|
|
@ -185,12 +185,15 @@ static void paging_T3113_expired(void *data)
|
||||||
req, req->subscr->imsi);
|
req, req->subscr->imsi);
|
||||||
|
|
||||||
struct paging_signal_data sig_data = {
|
struct paging_signal_data sig_data = {
|
||||||
|
.data = {
|
||||||
|
.area = S_PAGING,
|
||||||
|
},
|
||||||
.subscr = req->subscr,
|
.subscr = req->subscr,
|
||||||
.bts = req->bts,
|
.bts = req->bts,
|
||||||
.lchan = NULL,
|
.lchan = NULL,
|
||||||
};
|
};
|
||||||
|
|
||||||
dispatch_signal(S_PAGING, &sig_data.data);
|
dispatch_signal(&sig_data.data);
|
||||||
paging_remove_request(&req->bts->paging, req);
|
paging_remove_request(&req->bts->paging, req);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -48,12 +48,13 @@ void register_signal_handler(int areas,
|
||||||
llist_add_tail(&signal_handler_list, &sig_data->entry);
|
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;
|
struct signal_handler *handler;
|
||||||
|
|
||||||
llist_for_each_entry(handler, &signal_handler_list, entry) {
|
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);
|
llist_del(&handler->entry);
|
||||||
free(handler);
|
free(handler);
|
||||||
break;
|
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;
|
struct signal_handler *handler;
|
||||||
|
|
||||||
llist_for_each_entry(handler, &signal_handler_list, entry) {
|
llist_for_each_entry(handler, &signal_handler_list, entry) {
|
||||||
if (handler->areas & area) {
|
if (handler->areas & data->area) {
|
||||||
(*handler->sig_handler)(data, handler->data);
|
(*handler->sig_handler)(data, handler->data);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue