From: Sylvain Munaut <tnt(a)246tNt.com>
This is useful information to know and actually fixes a segfault
in rllp.c where lchan is accessed even tough it could be NULL in
case of failure.
Signed-off-by: Sylvain Munaut <tnt(a)246tNt.com>
---
openbsc/include/openbsc/signal.h | 3 ++-
openbsc/src/gsm_04_08_utils.c | 2 +-
openbsc/src/paging.c | 2 +-
openbsc/src/rrlp.c | 4 +++-
4 files changed, 7 insertions(+), 4 deletions(-)
diff --git a/openbsc/include/openbsc/signal.h b/openbsc/include/openbsc/signal.h
index 8c815f8..3680d56 100644
--- a/openbsc/include/openbsc/signal.h
+++ b/openbsc/include/openbsc/signal.h
@@ -45,7 +45,8 @@ enum signal_subsystems {
/* SS_PAGING signals */
enum signal_paging {
- S_PAGING_COMPLETED,
+ S_PAGING_SUCCEEDED,
+ S_PAGING_EXPIRED,
};
/* SS_SMS signals */
diff --git a/openbsc/src/gsm_04_08_utils.c b/openbsc/src/gsm_04_08_utils.c
index e96a1ca..2183743 100644
--- a/openbsc/src/gsm_04_08_utils.c
+++ b/openbsc/src/gsm_04_08_utils.c
@@ -488,7 +488,7 @@ int gsm48_handle_paging_resp(struct msgb *msg, struct gsm_subscriber
*subscr)
sig_data.bts = msg->lchan->ts->trx->bts;
sig_data.lchan = msg->lchan;
- dispatch_signal(SS_PAGING, S_PAGING_COMPLETED, &sig_data);
+ dispatch_signal(SS_PAGING, S_PAGING_SUCCEEDED, &sig_data);
/* Stop paging on the bts we received the paging response */
paging_request_stop(msg->trx->bts, subscr, msg->lchan);
diff --git a/openbsc/src/paging.c b/openbsc/src/paging.c
index b273419..6cd4d05 100644
--- a/openbsc/src/paging.c
+++ b/openbsc/src/paging.c
@@ -212,7 +212,7 @@ static void paging_T3113_expired(void *data)
cbfn = req->cbfn;
paging_remove_request(&req->bts->paging, req);
- dispatch_signal(SS_PAGING, S_PAGING_COMPLETED, &sig_data);
+ dispatch_signal(SS_PAGING, S_PAGING_EXPIRED, &sig_data);
if (cbfn)
cbfn(GSM_HOOK_RR_PAGING, GSM_PAGING_EXPIRED, NULL, NULL,
cbfn_param);
diff --git a/openbsc/src/rrlp.c b/openbsc/src/rrlp.c
index 60ce750..3504451 100644
--- a/openbsc/src/rrlp.c
+++ b/openbsc/src/rrlp.c
@@ -89,10 +89,12 @@ static int paging_sig_cb(unsigned int subsys, unsigned int signal,
struct paging_signal_data *psig_data = signal_data;
switch (signal) {
- case S_PAGING_COMPLETED:
+ case S_PAGING_SUCCEEDED:
/* A subscriber has attached. */
send_rrlp_req(psig_data->lchan);
break;
+ case S_PAGING_EXPIRED:
+ break;
}
return 0;
}
--
1.6.5.1
Show replies by thread
From: Sylvain Munaut <tnt(a)246tNt.com>
- Need to use sms.id for the ORDER BY since 'subscriber' also has 'id'
- Need to add the join clause between 'SMS' and 'subscriber'
- Add a LIMIT 1 (probably no impact for the db size we're dealing with
here, but with large DB and mysql/postgresql this can help the planner)
- (fix a wrong comment in passing ...)
Signed-off-by: Sylvain Munaut <tnt(a)246tNt.com>
---
openbsc/src/db.c | 8 +++++---
1 files changed, 5 insertions(+), 3 deletions(-)
diff --git a/openbsc/src/db.c b/openbsc/src/db.c
index 5dfefb5..ebfe923 100644
--- a/openbsc/src/db.c
+++ b/openbsc/src/db.c
@@ -769,8 +769,9 @@ struct gsm_sms *db_sms_get_unsent(struct gsm_network *net, int
min_id)
result = dbi_conn_queryf(conn,
"SELECT * FROM SMS,Subscriber "
"WHERE sms.id >= %llu AND sms.sent is NULL "
+ "AND sms.receiver_id = subscriber.id "
"AND subscriber.lac > 0 "
- "ORDER BY id",
+ "ORDER BY sms.id LIMIT 1",
min_id);
if (!result)
return NULL;
@@ -787,7 +788,7 @@ struct gsm_sms *db_sms_get_unsent(struct gsm_network *net, int
min_id)
return sms;
}
-/* retrieve the next unsent SMS with ID >= min_id */
+/* retrieve the next unsent SMS for a given subscriber */
struct gsm_sms *db_sms_get_unsent_for_subscr(struct gsm_subscriber *subscr)
{
dbi_result result;
@@ -796,8 +797,9 @@ struct gsm_sms *db_sms_get_unsent_for_subscr(struct gsm_subscriber
*subscr)
result = dbi_conn_queryf(conn,
"SELECT * FROM SMS,Subscriber "
"WHERE sms.receiver_id = %llu AND sms.sent is NULL "
+ "AND sms.receiver_id = subscriber.id "
"AND subscriber.lac > 0 "
- "ORDER BY id",
+ "ORDER BY sms.id LIMIT 1",
subscr->id);
if (!result)
return NULL;
--
1.6.5.1
Thanks, applied.
--
- Harald Welte <laforge(a)gnumonks.org>
http://laforge.gnumonks.org/
============================================================================
"Privacy in residential applications is a desirable marketing option."
(ETSI EN 300 175-7 Ch. A6)