From 5b2d493872f424e1447a71236b146082087cfdff Mon Sep 17 00:00:00 2001 From: Jeff Weston Date: Wed, 11 Sep 2019 11:44:47 -0400 Subject: [PATCH] v1.2b8 --- VERSION.TXT | 6 ++++++ common/normApi.cpp | 2 -- common/normApp.cpp | 7 ++++--- common/normEncoder.cpp | 9 ++++----- common/normNode.cpp | 4 ++-- common/normNode.h | 10 ++-------- common/normObject.cpp | 11 +++++++++-- common/normSegment.cpp | 7 +++---- common/normSession.cpp | 29 ++++++++++++++++++++++++----- common/normVersion.h | 2 +- 10 files changed, 55 insertions(+), 32 deletions(-) diff --git a/VERSION.TXT b/VERSION.TXT index b307f2b..c733a96 100644 --- a/VERSION.TXT +++ b/VERSION.TXT @@ -1,5 +1,11 @@ NORM Version History +Version 1.2b8 +============= + - Fixed bug introduced during "alignment" changes + in previous release. + - Fixed Protolib WIN32 build issue + Version 1.2b7 ============= - Changed normMessage.[h|cpp] to fix alignment issues diff --git a/common/normApi.cpp b/common/normApi.cpp index 0eda5c9..6272bfc 100644 --- a/common/normApi.cpp +++ b/common/normApi.cpp @@ -511,7 +511,6 @@ void NormInstance::Shutdown() default: break; } - notify_pool.Append(previous_notification); previous_notification = NULL; } @@ -545,7 +544,6 @@ void NormInstance::Shutdown() } delete n; } - notify_pool.Destroy(); } // end NormInstance::Shutdown() diff --git a/common/normApp.cpp b/common/normApp.cpp index 51e0b6e..0f22ce9 100644 --- a/common/normApp.cpp +++ b/common/normApp.cpp @@ -161,9 +161,10 @@ NormApp::NormApp() NormApp::~NormApp() { - if (address) delete address; - if (rx_cache_path) delete rx_cache_path; - if (post_processor) delete post_processor; + if (address) delete[] address; + if (interface_name) delete[] interface_name; + if (rx_cache_path) delete[] rx_cache_path; + if (post_processor) delete[] post_processor; } // NOTE on message flushing mode: diff --git a/common/normEncoder.cpp b/common/normEncoder.cpp index 757aa88..5c2d2d0 100644 --- a/common/normEncoder.cpp +++ b/common/normEncoder.cpp @@ -88,14 +88,14 @@ bool NormEncoder::Init(int numParity, int vecSizeMax) // Free memory allocated for encoder state (Encoder must be re-inited before use) void NormEncoder::Destroy() { - if(scratch) + if(NULL != scratch) { - delete []scratch; + delete[] scratch; scratch = NULL; } - if (genPoly) + if (NULL != genPoly) { - delete genPoly; + delete[] genPoly; genPoly = NULL; } } // end NormEncoder::Destroy() @@ -432,7 +432,6 @@ int NormDecoder::Decode(char** dVec, int ndata, UINT16 erasureCount, UINT16* era data++; } } - return erasureCount; } // end NormDecoder::Decode() diff --git a/common/normNode.cpp b/common/normNode.cpp index a714bda..6a68fc4 100644 --- a/common/normNode.cpp +++ b/common/normNode.cpp @@ -1983,7 +1983,7 @@ void NormNodeTree::AttachNode(NormNode *node) } } root = node; // root _was_ NULL -} // end NormNodeTree::AddNode() +} // end NormNodeTree::AttachNode() 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->right = node->right)) y->right->parent = y; - } + } } // end NormNodeTree::DetachNode() diff --git a/common/normNode.h b/common/normNode.h index 83001d6..61294b7 100644 --- a/common/normNode.h +++ b/common/normNode.h @@ -457,14 +457,9 @@ class NormNodeTree NormNodeTree(); ~NormNodeTree(); NormNode* FindNodeById(NormNodeId nodeId) const; - void DeleteNode(NormNode *theNode) - { - ASSERT(theNode); - DetachNode(theNode); - delete theNode; - } void AttachNode(NormNode *theNode); void DetachNode(NormNode *theNode); + NormNode* GetRoot() const {return root;} void Destroy(); // delete all nodes in tree private: @@ -505,8 +500,7 @@ class NormNodeList } void Destroy(); // delete all nodes in list const NormNode* Head() {return head;} - - + // Members private: NormNode* head; diff --git a/common/normObject.cpp b/common/normObject.cpp index 7b68fd2..ddc2fc1 100644 --- a/common/normObject.cpp +++ b/common/normObject.cpp @@ -67,6 +67,7 @@ bool NormObject::Open(const NormObjectSize& objectSize, // DATA or FILE objects, buffer size for STREAM objects // In either case, we need our sliding bit masks to be of // appropriate size. + ASSERT(!IsOpen()); if (server) { if (infoLen > 0) @@ -1950,7 +1951,7 @@ NormDataObject::~NormDataObject() { if (data_ptr) { - delete data_ptr; + delete[] data_ptr; data_ptr = NULL; } data_released = false; @@ -1964,6 +1965,12 @@ bool NormDataObject::Open(char* dataPtr, const char* infoPtr, UINT16 infoLen) { + if (data_released && (NULL != data_ptr)) + { + delete[] data_ptr; + data_ptr = NULL; + data_released = false; + } if (server) { // We're receiving this data object @@ -3067,7 +3074,7 @@ void NormObjectTable::Destroy() while((obj = Find(range_lo))) { Remove(obj); - delete obj; + delete obj; // (TBD - make this obj->Release() ??? } delete []table; table = (NormObject**)NULL; diff --git a/common/normSegment.cpp b/common/normSegment.cpp index 5417bc5..6cc8d3e 100644 --- a/common/normSegment.cpp +++ b/common/normSegment.cpp @@ -53,13 +53,12 @@ bool NormSegmentPool::Init(unsigned int count, unsigned int size) void NormSegmentPool::Destroy() { ASSERT(seg_count == seg_total); - char* ptr; - memcpy(&ptr, &seg_list, sizeof(char*)); + char* ptr = seg_list; while (ptr) { char* next; memcpy(&next, ptr, sizeof(char*)); - delete ptr; + delete[] ptr; ptr = next; } seg_list = NULL; @@ -73,7 +72,7 @@ char* NormSegmentPool::Get() char* ptr = seg_list; if (ptr) { - memcpy(&seg_list, ptr, sizeof(char)); + memcpy(&seg_list, ptr, sizeof(char*)); seg_count--; //#ifdef NORM_DEBUG overrun_flag = false; diff --git a/common/normSession.cpp b/common/normSession.cpp index 34878f5..5f62cfc 100644 --- a/common/normSession.cpp +++ b/common/normSession.cpp @@ -363,12 +363,22 @@ void NormSession::StopServer() { if (probe_timer.IsActive()) probe_timer.Deactivate(); 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(); block_pool.Destroy(); segment_pool.Destroy(); tx_repair_mask.Destroy(); tx_pending_mask.Destroy(); - tx_table.Destroy(); is_server = false; if (!IsClient()) Close(); } // end NormSession::StopServer() @@ -386,7 +396,17 @@ bool NormSession::StartClient(unsigned long bufferSize, const char* interfaceNam void NormSession::StopClient() { - server_tree.Destroy(); + // Iterate server_tree and close/release server nodes + NormServerNode* serverNode = + static_cast(server_tree.GetRoot()); + while (serverNode) + { + server_tree.DetachNode(serverNode); + serverNode->Close(); + serverNode->Release(); + serverNode = + static_cast(server_tree.GetRoot()); + } is_client = false; if (!is_server) Close(); } @@ -639,7 +659,8 @@ void NormSession::ServerRemoveAckingNode(NormNodeId nodeId) { if (watermark_pending && theNode->AckReceived()) acks_collected--; - acking_node_tree.DeleteNode(theNode); + acking_node_tree.DetachNode(theNode); + delete theNode; acking_node_count--; } } // end NormSession::RemoveAckingNode() @@ -982,8 +1003,6 @@ bool NormSession::QueueTxObject(NormObject* obj) ASSERT(tx_pending_mask.Test(obj->GetId())); next_tx_object_id++; TouchServer(); - //posted_tx_queue_empty = false; - //Serve(); return true; } // end NormSession::QueueTxObject() diff --git a/common/normVersion.h b/common/normVersion.h index 1e0d806..c052ccf 100644 --- a/common/normVersion.h +++ b/common/normVersion.h @@ -32,6 +32,6 @@ #ifndef _NORM_VERSION #define _NORM_VERSION -#define VERSION "1.2b7" +#define VERSION "1.2b8" #endif // _NORM_VERSION