bug 1726: avoid segmentation fault when logging; code cleanup

This commit is contained in:
Matias Richart
2015-01-25 12:01:21 -08:00
parent 7e4542f5c0
commit d4d29990c8

View File

@@ -429,7 +429,6 @@ MinstrelWifiManager::DoReportDataOk (WifiRemoteStation *st,
UpdateRetry (station);
//station->m_minstrelTable[station->m_txrate].numRateAttempt += station->m_retry;
station->m_packetCount++;
if (m_nsupported >= 1)
@@ -443,6 +442,13 @@ MinstrelWifiManager::DoReportFinalDataFailed (WifiRemoteStation *st)
{
NS_LOG_FUNCTION (st);
MinstrelWifiRemoteStation *station = (MinstrelWifiRemoteStation *) st;
CheckInit (station);
if (!station->m_initialized)
{
return;
}
NS_LOG_DEBUG ("DoReportFinalDataFailed m_txrate = " << station->m_txrate << ", attempt = " << station->m_minstrelTable[station->m_txrate].numRateAttempt << ", success = " << station->m_minstrelTable[station->m_txrate].numRateSuccess << " (before update).");
station->m_isSampling = false;
@@ -450,7 +456,6 @@ MinstrelWifiManager::DoReportFinalDataFailed (WifiRemoteStation *st)
UpdateRetry (station);
//station->m_minstrelTable[station->m_txrate].numRateAttempt += station->m_retry;
station->m_err++;
NS_LOG_DEBUG ("DoReportFinalDataFailed m_txrate = " << station->m_txrate << ", attempt = " << station->m_minstrelTable[station->m_txrate].numRateAttempt << ", success = " << station->m_minstrelTable[station->m_txrate].numRateSuccess << " (after update).");
@@ -793,9 +798,6 @@ MinstrelWifiManager::UpdateStats (MinstrelWifiRemoteStation *station)
NS_LOG_DEBUG ("max throughput=" << index_max_tp << "(" << GetSupported (station, index_max_tp) <<
")\tsecond max throughput=" << index_max_tp2 << "(" << GetSupported (station, index_max_tp2) <<
")\tmax prob=" << index_max_prob << "(" << GetSupported (station, index_max_prob) << ")");
/// reset it
//RateInit (station);
}
void
@@ -858,34 +860,6 @@ MinstrelWifiManager::CalculateTimeUnicastPacket (Time dataTransmissionTime, uint
cw = std::min (cwMax, (cw + 1) * 2);
}
/*
// First, we have to sense idle channel for DIFS (SIFS + 2*SLOT)
Time tt = GetMac ()->GetSifs () + GetMac ()->GetSlot () + GetMac ()->GetSlot ();
NS_LOG_DEBUG ("tt (DIFS) = " << tt);
// Next, we add the ACK timeout duration. Since we are given longRetries, the number of ACK timeout
// is longRetries + 1 (first transmission and longRetries times).
tt += NanoSeconds ((longRetries + 1) * GetMac ()->GetAckTimeout ());
NS_LOG_DEBUG ("tt (DIFS + ACKs) = " << tt << " (ACK TO) = " << GetMac ()->GetAckTimeout ());
// Next, we add the time to send (longRetries + 1) DATA. Same logic as ACK timeout.
// They can be combined, but separated for clarity.
tt += NanoSeconds ((longRetries + 1) * dataTransmissionTime);
NS_LOG_DEBUG ("tt (DIFS + ACKs + DATAs) = " << tt);
// Finally, we account for the backoff time between retransmissions.
// The original minstrel code seems to estimate the time as half the current contention window.
// The calculation of the original minsrel code is a little bit off (not exactly half) so we do the same.
// In addition, WIFI_CW_MIN is set to 31 in the original code.
uint32_t cwMax = 1023;
uint32_t cw = 31;
for (uint32_t i = 0; i <= (shortRetries + longRetries); i++)
{
cw = std::min (cwMax, (cw + 1) * 2); // estimate the current contention window size (I think it's a bit off)
NS_LOG_DEBUG (" cw = " << cw);
tt += NanoSeconds ((cw / 2) * GetMac ()->GetSlot ()); // average is about half
NS_LOG_DEBUG (" tt (DIFS + ACKs + DATAs + " << cw << " cw) = " << tt);
}
*/
return tt;
}
@@ -929,14 +903,16 @@ MinstrelWifiManager::PrintSampleTable (MinstrelWifiRemoteStation *station)
NS_LOG_DEBUG ("PrintSampleTable=" << station);
uint32_t numSampleRates = m_nsupported;
std::stringstream table;
for (uint32_t i = 0; i < numSampleRates; i++)
{
for (uint32_t j = 0; j < m_sampleCol; j++)
{
std::cout << station->m_sampleTable[i][j] << "\t";
table << station->m_sampleTable[i][j] << "\t";
}
std::cout << std::endl;
table << std::endl;
}
NS_LOG_DEBUG (table.str());
}
void