Hi,
I was wondering if anyone heard of a nanoBTS without EFR support ?
I have one here that responds with BIND_NACK if the codec is EFR but
works ok if I set V1
Sylvain
Hi all,
I have written this small patch yesterday. It is removing the "auto release"
after timeout from lchan and will directly release the channel ones the ref
count drops to zero.
This means that any use of the lchan after a put_lchan is illegal (the code
using a timeout used to workaround this issue). I have changed three call
sites to follow this convention, I have added a BUG_ON into the abis_rsl
method.
From a quick test (Location Updating Request and a call) the BUG_ON in the
abis_rsl.c is hit by:
- The lchan release code (okay... a false warning and avoided by
increasing use_count and decreasing it...)
- CM Service Request Ack and such is sent without anyone holding
a reference to it. I think this warning is safe to ignore for now as
no one has simply claimed the channel. I plan to fix this in
January/February when moving our MSC code over to the On Waves
BSC abstraction.
The benefit of this change is that we free our channels a lot earlier. I think
this change would be beneficial for the 26C3 and I would like to hear opinions
and see some testing with it.
regards
z.
Hi Harald,
I have one problem with the BTS on cold start. OpenBSC is sending the RSL
connect, Radio Carrier/Baseband attributes too early and we are receiving
NACKs from the BTS and the RSL link is never established.
The first question is if others have seen this problem? I have solved the
problem my moving the OP start/set attributes/RSL connect of the RC and
Baseband out of the state change code into the "Software Activated Report".
Doing a quick check it seems to still work and solve my cold start problem. Do
you think this is a legitimate workaround for the problem right now?
In the future we probably should attempt to have a better state machine,
report errors, retry and such things...
regards
holger
this patch fixes double free of paging request.
the function paging_T3113_expired() must call paging_remove_request()
first. then the cbfn may be called. the cbfn function cannot eventually
remove the paging request again, because it is not in the list anymore.
the result of paging timeout was a crash.
diff --git a/openbsc/src/paging.c b/openbsc/src/paging.c
index 5a9643c..164a08b 100644
--- a/openbsc/src/paging.c
+++ b/openbsc/src/paging.c
@@ -224,11 +243,13 @@ static void paging_T3113_expired(void *data)
sig_data.bts = req->bts;
sig_data.lchan = NULL;
+ /* must be destroyed before calling cbfn, to prevent double free
*/
+ paging_remove_request(&req->bts->paging, req);
+
dispatch_signal(SS_PAGING, S_PAGING_COMPLETED, &sig_data);
if (req->cbfn)
req->cbfn(GSM_HOOK_RR_PAGING, GSM_PAGING_EXPIRED, NULL,
NULL,
req->cbfn_param);
- paging_remove_request(&req->bts->paging, req);
}
static int _paging_request(struct gsm_bts *bts, struct gsm_subscriber
*subscr,