Oh kay. Lots of patches trying to catch up to mainline:

r4232: Major change in hos entries are removed from a TransactionTable.

>From now on, the only place were entries are actually removed is in TransactionTable::innerRemove.
Anywhere else, the remove methods just set a flag to tag the entry for later removal be innerRemove.
This allows us to survive situations where we try to touch transactions that have been removed already.  We still log at the ERR level, but no more segfaults.

Updated all of the TransactionTable "find" methods to not return pointers to dead or removed tranactions.

Updated find-by-channel search to return the transaction entry with the highest transaction number, which fixes a bug that sometimes picked up the wrong transaction records during EA TCH assignment.

r4253: New exception class for when someone tries to use a "removed" transaction.

r4254: Updated copyright notice.

r4265: Unlock TransactionEntry::mLock while blocked on SIP message FIFOs in SIPEngine.  This does wonders to reduce lock contention and make everything more snappy.

Use Mutex::tryLock in TransactionEntry::dead and if lock is held, assume that it is not dead.  This also does a lot to reduce lock contention.

r4294: Change Um congestion response back to SIP 503.

r4295: When deleting an entry that has failed to respond to paging, send a SIP 480 response so the switch knows that transaction is dead.

r4412: Fixed bug that was causing SIPInterface to crash when the IMSI cannot be extracted from the To: header.

git-svn-id: http://wush.net/svn/range/software/public/openbts/trunk@4497 19bc5d8c-e614-43d4-8b26-e1612bc8e597
This commit is contained in:
kurtis.heimerl
2012-11-22 05:30:27 +00:00
parent 191b471cea
commit 0c1a306efc
11 changed files with 876 additions and 302 deletions

View File

@@ -904,7 +904,7 @@ void Control::MOCController(TransactionEntry *transaction, GSM::TCHFACCHLogicalC
if (transaction->clearingGSM()) return abortAndRemoveCall(transaction,TCH,GSM::L3Cause(0x7F));
LOG(INFO) << "wait for Ringing or OK";
SIP::SIPState state = transaction->MOCWaitForOK();
SIP::SIPState state = transaction->MOCCheckForOK();
LOG(DEBUG) << "SIP state="<<state;
switch (state) {
case SIP::Busy:
@@ -948,7 +948,7 @@ void Control::MOCController(TransactionEntry *transaction, GSM::TCHFACCHLogicalC
while (state!=SIP::Active) {
LOG(DEBUG) << "wait for SIP session start";
state = transaction->MOCWaitForOK();
state = transaction->MOCCheckForOK();
LOG(DEBUG) << "SIP state "<< state;
// check GSM state
@@ -1152,7 +1152,7 @@ void Control::MTCController(TransactionEntry *transaction, GSM::TCHFACCHLogicalC
while (state!=SIP::Active) {
LOG(DEBUG) << "wait for SIP OKAY-ACK";
if (updateGSMSignalling(transaction,TCH)) return abortAndRemoveCall(transaction,TCH,GSM::L3Cause(0x15));
state = transaction->MTCWaitForACK();
state = transaction->MTCCheckForACK();
LOG(DEBUG) << "SIP call state "<< state;
switch (state) {
case SIP::Active: