pull/2/head
Jeff Weston 2019-09-11 11:44:47 -04:00
parent cd02273e2a
commit 5b2d493872
10 changed files with 55 additions and 32 deletions

View File

@ -1,5 +1,11 @@
NORM Version History NORM Version History
Version 1.2b8
=============
- Fixed bug introduced during "alignment" changes
in previous release.
- Fixed Protolib WIN32 build issue
Version 1.2b7 Version 1.2b7
============= =============
- Changed normMessage.[h|cpp] to fix alignment issues - Changed normMessage.[h|cpp] to fix alignment issues

View File

@ -511,7 +511,6 @@ void NormInstance::Shutdown()
default: default:
break; break;
} }
notify_pool.Append(previous_notification); notify_pool.Append(previous_notification);
previous_notification = NULL; previous_notification = NULL;
} }
@ -545,7 +544,6 @@ void NormInstance::Shutdown()
} }
delete n; delete n;
} }
notify_pool.Destroy(); notify_pool.Destroy();
} // end NormInstance::Shutdown() } // end NormInstance::Shutdown()

View File

@ -161,9 +161,10 @@ NormApp::NormApp()
NormApp::~NormApp() NormApp::~NormApp()
{ {
if (address) delete address; if (address) delete[] address;
if (rx_cache_path) delete rx_cache_path; if (interface_name) delete[] interface_name;
if (post_processor) delete post_processor; if (rx_cache_path) delete[] rx_cache_path;
if (post_processor) delete[] post_processor;
} }
// NOTE on message flushing mode: // NOTE on message flushing mode:

View File

@ -88,14 +88,14 @@ bool NormEncoder::Init(int numParity, int vecSizeMax)
// Free memory allocated for encoder state (Encoder must be re-inited before use) // Free memory allocated for encoder state (Encoder must be re-inited before use)
void NormEncoder::Destroy() void NormEncoder::Destroy()
{ {
if(scratch) if(NULL != scratch)
{ {
delete []scratch; delete[] scratch;
scratch = NULL; scratch = NULL;
} }
if (genPoly) if (NULL != genPoly)
{ {
delete genPoly; delete[] genPoly;
genPoly = NULL; genPoly = NULL;
} }
} // end NormEncoder::Destroy() } // end NormEncoder::Destroy()
@ -432,7 +432,6 @@ int NormDecoder::Decode(char** dVec, int ndata, UINT16 erasureCount, UINT16* era
data++; data++;
} }
} }
return erasureCount; return erasureCount;
} // end NormDecoder::Decode() } // end NormDecoder::Decode()

View File

@ -1983,7 +1983,7 @@ void NormNodeTree::AttachNode(NormNode *node)
} }
} }
root = node; // root _was_ NULL root = node; // root _was_ NULL
} // end NormNodeTree::AddNode() } // end NormNodeTree::AttachNode()
void NormNodeTree::DetachNode(NormNode* node) void NormNodeTree::DetachNode(NormNode* node)
@ -2040,7 +2040,7 @@ void NormNodeTree::DetachNode(NormNode* node)
} }
if ((y->left = node->left)) y->left->parent = y; if ((y->left = node->left)) y->left->parent = y;
if ((y->right = node->right)) y->right->parent = y; if ((y->right = node->right)) y->right->parent = y;
} }
} // end NormNodeTree::DetachNode() } // end NormNodeTree::DetachNode()

View File

@ -457,14 +457,9 @@ class NormNodeTree
NormNodeTree(); NormNodeTree();
~NormNodeTree(); ~NormNodeTree();
NormNode* FindNodeById(NormNodeId nodeId) const; NormNode* FindNodeById(NormNodeId nodeId) const;
void DeleteNode(NormNode *theNode)
{
ASSERT(theNode);
DetachNode(theNode);
delete theNode;
}
void AttachNode(NormNode *theNode); void AttachNode(NormNode *theNode);
void DetachNode(NormNode *theNode); void DetachNode(NormNode *theNode);
NormNode* GetRoot() const {return root;}
void Destroy(); // delete all nodes in tree void Destroy(); // delete all nodes in tree
private: private:
@ -505,8 +500,7 @@ class NormNodeList
} }
void Destroy(); // delete all nodes in list void Destroy(); // delete all nodes in list
const NormNode* Head() {return head;} const NormNode* Head() {return head;}
// Members // Members
private: private:
NormNode* head; NormNode* head;

View File

@ -67,6 +67,7 @@ bool NormObject::Open(const NormObjectSize& objectSize,
// DATA or FILE objects, buffer size for STREAM objects // DATA or FILE objects, buffer size for STREAM objects
// In either case, we need our sliding bit masks to be of // In either case, we need our sliding bit masks to be of
// appropriate size. // appropriate size.
ASSERT(!IsOpen());
if (server) if (server)
{ {
if (infoLen > 0) if (infoLen > 0)
@ -1950,7 +1951,7 @@ NormDataObject::~NormDataObject()
{ {
if (data_ptr) if (data_ptr)
{ {
delete data_ptr; delete[] data_ptr;
data_ptr = NULL; data_ptr = NULL;
} }
data_released = false; data_released = false;
@ -1964,6 +1965,12 @@ bool NormDataObject::Open(char* dataPtr,
const char* infoPtr, const char* infoPtr,
UINT16 infoLen) UINT16 infoLen)
{ {
if (data_released && (NULL != data_ptr))
{
delete[] data_ptr;
data_ptr = NULL;
data_released = false;
}
if (server) if (server)
{ {
// We're receiving this data object // We're receiving this data object
@ -3067,7 +3074,7 @@ void NormObjectTable::Destroy()
while((obj = Find(range_lo))) while((obj = Find(range_lo)))
{ {
Remove(obj); Remove(obj);
delete obj; delete obj; // (TBD - make this obj->Release() ???
} }
delete []table; delete []table;
table = (NormObject**)NULL; table = (NormObject**)NULL;

View File

@ -53,13 +53,12 @@ bool NormSegmentPool::Init(unsigned int count, unsigned int size)
void NormSegmentPool::Destroy() void NormSegmentPool::Destroy()
{ {
ASSERT(seg_count == seg_total); ASSERT(seg_count == seg_total);
char* ptr; char* ptr = seg_list;
memcpy(&ptr, &seg_list, sizeof(char*));
while (ptr) while (ptr)
{ {
char* next; char* next;
memcpy(&next, ptr, sizeof(char*)); memcpy(&next, ptr, sizeof(char*));
delete ptr; delete[] ptr;
ptr = next; ptr = next;
} }
seg_list = NULL; seg_list = NULL;
@ -73,7 +72,7 @@ char* NormSegmentPool::Get()
char* ptr = seg_list; char* ptr = seg_list;
if (ptr) if (ptr)
{ {
memcpy(&seg_list, ptr, sizeof(char)); memcpy(&seg_list, ptr, sizeof(char*));
seg_count--; seg_count--;
//#ifdef NORM_DEBUG //#ifdef NORM_DEBUG
overrun_flag = false; overrun_flag = false;

View File

@ -363,12 +363,22 @@ void NormSession::StopServer()
{ {
if (probe_timer.IsActive()) probe_timer.Deactivate(); if (probe_timer.IsActive()) probe_timer.Deactivate();
encoder.Destroy(); encoder.Destroy();
acking_node_tree.Destroy();
cc_node_list.Destroy();
// Iterate tx_table and release objects
while (!tx_table.IsEmpty())
{
NormObject* obj = tx_table.Find(tx_table.RangeLo());
ASSERT(obj);
tx_table.Remove(obj);
obj->Release();
}
// Then destroy table
tx_table.Destroy(); tx_table.Destroy();
block_pool.Destroy(); block_pool.Destroy();
segment_pool.Destroy(); segment_pool.Destroy();
tx_repair_mask.Destroy(); tx_repair_mask.Destroy();
tx_pending_mask.Destroy(); tx_pending_mask.Destroy();
tx_table.Destroy();
is_server = false; is_server = false;
if (!IsClient()) Close(); if (!IsClient()) Close();
} // end NormSession::StopServer() } // end NormSession::StopServer()
@ -386,7 +396,17 @@ bool NormSession::StartClient(unsigned long bufferSize, const char* interfaceNam
void NormSession::StopClient() void NormSession::StopClient()
{ {
server_tree.Destroy(); // Iterate server_tree and close/release server nodes
NormServerNode* serverNode =
static_cast<NormServerNode*>(server_tree.GetRoot());
while (serverNode)
{
server_tree.DetachNode(serverNode);
serverNode->Close();
serverNode->Release();
serverNode =
static_cast<NormServerNode*>(server_tree.GetRoot());
}
is_client = false; is_client = false;
if (!is_server) Close(); if (!is_server) Close();
} }
@ -639,7 +659,8 @@ void NormSession::ServerRemoveAckingNode(NormNodeId nodeId)
{ {
if (watermark_pending && theNode->AckReceived()) if (watermark_pending && theNode->AckReceived())
acks_collected--; acks_collected--;
acking_node_tree.DeleteNode(theNode); acking_node_tree.DetachNode(theNode);
delete theNode;
acking_node_count--; acking_node_count--;
} }
} // end NormSession::RemoveAckingNode() } // end NormSession::RemoveAckingNode()
@ -982,8 +1003,6 @@ bool NormSession::QueueTxObject(NormObject* obj)
ASSERT(tx_pending_mask.Test(obj->GetId())); ASSERT(tx_pending_mask.Test(obj->GetId()));
next_tx_object_id++; next_tx_object_id++;
TouchServer(); TouchServer();
//posted_tx_queue_empty = false;
//Serve();
return true; return true;
} // end NormSession::QueueTxObject() } // end NormSession::QueueTxObject()

View File

@ -32,6 +32,6 @@
#ifndef _NORM_VERSION #ifndef _NORM_VERSION
#define _NORM_VERSION #define _NORM_VERSION
#define VERSION "1.2b7" #define VERSION "1.2b8"
#endif // _NORM_VERSION #endif // _NORM_VERSION