]> oss.titaniummirror.com Git - tinyos-2.x.git/commitdiff
frame must only be accessed in active/orphan scan
authorjanhauer <janhauer>
Mon, 27 Apr 2009 09:42:08 +0000 (09:42 +0000)
committerjanhauer <janhauer>
Mon, 27 Apr 2009 09:42:08 +0000 (09:42 +0000)
tos/lib/mac/tkn154/ScanP.nc

index 366ccb7a92c0f2b63fdbc7d83f5c775ac88b3cc5..a92fc5ac9e42b99d9143b1bcfdbd84f939608508 100644 (file)
@@ -132,26 +132,28 @@ implementation
     } else if (security && security->SecurityLevel) {
       status = IEEE154_UNSUPPORTED_SECURITY;
     } if ((ScanType > 3) || (ScanType < 3 && ScanDuration > 14) || 
-          (ChannelPage != IEEE154_SUPPORTED_CHANNELPAGE) ||
-          !(supportedChannels & ScanChannels) ||
-          ((ScanType != ORPHAN_SCAN) &&
-          ((EnergyDetectListNumEntries && PANDescriptorListNumEntries) ||
+        (ChannelPage != IEEE154_SUPPORTED_CHANNELPAGE) ||
+        !(supportedChannels & ScanChannels) ||
+        ((ScanType != ORPHAN_SCAN) &&
+         ((EnergyDetectListNumEntries && PANDescriptorListNumEntries) ||
           (EnergyDetectList != NULL && PANDescriptorList != NULL) ||
           (EnergyDetectListNumEntries && EnergyDetectList == NULL) ||
           (PANDescriptorListNumEntries && PANDescriptorList == NULL)))) {
       status = IEEE154_INVALID_PARAMETER;
-    } else if (ScanType != ENERGY_DETECTION_SCAN &&
-        !(m_txFrame = call TxFramePool.get())) { 
+    } else if ((ScanType == ACTIVE_SCAN || ScanType == ORPHAN_SCAN) &&
+        ((m_txFrame = call TxFramePool.get()) == NULL)) {
       status = IEEE154_TRANSACTION_OVERFLOW;
-    } else if (ScanType != ENERGY_DETECTION_SCAN &&
-        !(txControl = call TxControlPool.get())) { 
+    } else if ((ScanType == ACTIVE_SCAN || ScanType == ORPHAN_SCAN) &&
+        ((txControl = call TxControlPool.get()) == NULL)) { 
       call TxFramePool.put(m_txFrame);
       m_txFrame = NULL;
       status = IEEE154_TRANSACTION_OVERFLOW;
     } else {
-      m_txFrame->header = &txControl->header;
-      m_txFrame->payload = m_payload;
-      m_txFrame->metadata = &txControl->metadata;
+      if (m_txFrame != NULL){
+        m_txFrame->header = &txControl->header;
+        m_txFrame->payload = m_payload;
+        m_txFrame->metadata = &txControl->metadata;
+      }
       m_busy = TRUE;
       m_scanType = ScanType;
       m_scanChannels = ScanChannels;