commit-gnuradio
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Commit-gnuradio] r10051 - openbts/branches/developers/dburgess00/trunk/


From: dburgess00
Subject: [Commit-gnuradio] r10051 - openbts/branches/developers/dburgess00/trunk/GSM
Date: Tue, 25 Nov 2008 10:45:32 -0700 (MST)

Author: dburgess00
Date: 2008-11-25 10:45:32 -0700 (Tue, 25 Nov 2008)
New Revision: 10051

Modified:
   openbts/branches/developers/dburgess00/trunk/GSM/GSMConfig.cpp
   openbts/branches/developers/dburgess00/trunk/GSM/GSML1FEC.cpp
Log:
Fix for bug #321 in TCHFACCHL1Encoder::sendFrame() blocking
mechanism.


Modified: openbts/branches/developers/dburgess00/trunk/GSM/GSMConfig.cpp
===================================================================
--- openbts/branches/developers/dburgess00/trunk/GSM/GSMConfig.cpp      
2008-11-25 04:06:15 UTC (rev 10050)
+++ openbts/branches/developers/dburgess00/trunk/GSM/GSMConfig.cpp      
2008-11-25 17:45:32 UTC (rev 10051)
@@ -144,9 +144,7 @@
        ++chan;
        while (chan!=chanList.end()) {
                unsigned thisLoad = (*chan)->load();
-               if ((thisLoad<minLoad) ||
-                       ((thisLoad==minLoad) && (random()%2)) )
-               {
+               if (thisLoad<minLoad) {
                        minLoad = thisLoad;
                        retVal = *chan;
                }
@@ -168,10 +166,7 @@
        unsigned pos = random() % sz;
        for (unsigned i=0; i<sz; i++) {
                ChanType *chan = chanList[pos];
-               if (chan->recyclable()) {
-                       chan->open();
-                       return chan;
-               }
+               if (chan->recyclable()) return chan;
                pos = (pos+1) % sz;
        }
        return NULL;
@@ -185,6 +180,7 @@
 {
        mLock.lock();
        SDCCHLogicalChannel *chan = getChan<SDCCHLogicalChannel>(mSDCCHPool);
+       if (chan) chan->open();
        mLock.unlock();
        return chan;
 }
@@ -194,6 +190,7 @@
 {
        mLock.lock();
        TCHFACCHLogicalChannel *chan = 
getChan<TCHFACCHLogicalChannel>(mTCHPool);
+       if (chan) chan->open();
        mLock.unlock();
        return chan;
 }

Modified: openbts/branches/developers/dburgess00/trunk/GSM/GSML1FEC.cpp
===================================================================
--- openbts/branches/developers/dburgess00/trunk/GSM/GSML1FEC.cpp       
2008-11-25 04:06:15 UTC (rev 10050)
+++ openbts/branches/developers/dburgess00/trunk/GSM/GSML1FEC.cpp       
2008-11-25 17:45:32 UTC (rev 10051)
@@ -1234,6 +1234,13 @@
 
 void TCHFACCHL1Encoder::dispatch()
 {
+
+       // No downstream?  That's a problem.
+       assert(mDownstream);
+
+       // Get right with the system clock.
+       resync();
+
        // If the channel is not active, wait for a multiframe and return.
        // Most channels do not need this, becuase they are entirely data-driven
        // from above.  TCH/FACCH, however, must feed the interleaver on time.
@@ -1243,8 +1250,6 @@
                return;
        }
 
-       assert(mDownstream);
-
        // Let previous data get transmitted.
        resync();
        waitToSend();





reply via email to

[Prev in Thread] Current Thread [Next in Thread]