pull/2/head
Jeff Weston 2019-09-11 12:01:38 -04:00
parent b4e177654e
commit 8e24aea5ed
4 changed files with 16 additions and 20 deletions

View File

@ -105,8 +105,6 @@ NormDeveloperGuide.html - HTML version of NORM Developer's Guide
(nice for browsing)
NormUserGuide.pdf - Guide to "norm" demo app usage
(this document needs corrections and
is currently incomplete)
VERSION.TXT - NORM version history notes

View File

@ -21,9 +21,8 @@ Version 1.4b3
- Fixed issue with NormSession::QueueTxObject() where ASSERT() failure
occurred depending upon previous tx object enqueue/dequeue history
(Thanks to Jeff Bush for finding this one)
- Changed repeated scheduling of receiver remote sender inactivity
timer to ensure that busy CPU doesn't result in premature
inactivity indication.
- Fixed issue with fix for stream lockup problem from below.
(this is in version 1.4b3a)
Version 1.4b2
=============

View File

@ -1598,19 +1598,18 @@ bool NormObject::NextServerMsg(NormObjectMsg* msg)
}
block->TxInit(blockId, numData, session.ServerAutoParity());
if (blockId < max_pending_block)
block->SetFlag(NormBlock::IN_REPAIR);
if (blockId < max_pending_block) block->SetFlag(NormBlock::IN_REPAIR);
while (!block_buffer.Insert(block))
{
ASSERT(STREAM == type);
if (blockId > block_buffer.RangeLo())
{
NormBlock* b = block_buffer.Find(block_buffer.RangeLo());
ASSERT(NULL != b);
ASSERT(!b->IsPending());
NormBlock* lowBlock = block_buffer.Find(block_buffer.RangeLo());
ASSERT(NULL != lowBlock);
ASSERT(!lowBlock->IsPending());
NormBlockId lowBlockId = lowBlock->GetId();
bool push = static_cast<NormStreamObject*>(this)->GetPushMode();
if (!push && (b->IsRepairPending() || IsRepairSet(b->GetId())))
if (!push && (lowBlock->IsRepairPending() || IsRepairSet(lowBlockId)))
{
// Pending repairs delaying stream advance
DMSG(4, "NormObject::NextServerMsg() node>%lu pending repairs delaying stream progress\n", LocalNodeId());
@ -1620,12 +1619,12 @@ bool NormObject::NextServerMsg(NormObjectMsg* msg)
else
{
// Prune old non-pending block (or even pending if "push" enabled stream)
block_buffer.Remove(b);
repair_mask.Unset(blockId); // just in case
pending_mask.Unset(blockId);
if (IsStream())
static_cast<NormStreamObject*>(this)->UnlockBlock(b->GetId());
session.ServerPutFreeBlock(b);
block_buffer.Remove(lowBlock);
repair_mask.Unset(lowBlockId); // just in case
pending_mask.Unset(lowBlockId);
if (IsStream()) // always true
static_cast<NormStreamObject*>(this)->UnlockBlock(lowBlockId);
session.ServerPutFreeBlock(lowBlock);
continue;
}
}
@ -1641,8 +1640,8 @@ bool NormObject::NextServerMsg(NormObjectMsg* msg)
}
else
{
ASSERT(0);
DMSG(0, "NormObject::NextServerMsg() invalid non-stream state!\n");
ASSERT(0);
return false;
}
}

View File

@ -32,6 +32,6 @@
#ifndef _NORM_VERSION
#define _NORM_VERSION
#define VERSION "1.4b3"
#define VERSION "1.4b3a"
#endif // _NORM_VERSION