1
0
mirror of https://github.com/Ylianst/MeshAgent synced 2025-12-06 00:13:33 +00:00

1. Updated LinkedList to use ILibMemory_SmartAllocate

2. Updated ILibChain_Continue to flag when it exits the processing loop
3. Updated main loop to reset continuation flag at the start of each loop
This commit is contained in:
Bryan Roe
2019-06-13 13:36:43 -07:00
parent 7365f1a49d
commit bb82553fa8
2 changed files with 25 additions and 24 deletions

View File

@@ -255,6 +255,9 @@ typedef struct ILibLinkedListNode_Root
void *ExtraMemory;
}ILibLinkedListNode_Root;
const int ILibLinkedListNode_SIZE = sizeof(ILibLinkedListNode);
const int ILibLinkedListNodeRoot_Size = sizeof(ILibLinkedListNode_Root);
struct ILibReaderWriterLock_Data
{
ILibChain_PreSelect Pre;
@@ -863,12 +866,6 @@ struct ILibBaseChain_SafeData
void *Object;
};
typedef enum ILibChain_ContinuationStates
{
ILibChain_ContinuationState_INACTIVE = 0,
ILibChain_ContinuationState_CONTINUE = 1,
ILibChain_ContinuationState_END_CONTINUE= 2
}ILibChain_ContinuationStates;
typedef struct ILibBaseChain
{
@@ -1921,6 +1918,10 @@ void ILibChain_UpdateEventHook(ILibChain_EventHookToken token, int maxTimeout)
memset(hook, 0, sizeof(ILibChain_Link_Hook));
}
}
ILibChain_ContinuationStates ILibChain_GetContinuationState(void *chain)
{
return(((ILibBaseChain*)chain)->continuationState);
}
ILibExportMethod void ILibChain_Continue(void *Chain, ILibChain_Link **modules, int moduleCount, int maxTimeout)
{
ILibBaseChain *chain = (ILibBaseChain*)Chain;
@@ -1936,7 +1937,7 @@ ILibExportMethod void ILibChain_Continue(void *Chain, ILibChain_Link **modules,
ILibLinkedListNode tmpNode;
memset(&tmpNode, 0, sizeof(tmpNode));
if (root->continuationState != ILibChain_ContinuationState_INACTIVE) { return; }
if (root->continuationState != ILibChain_ContinuationState_INACTIVE && root->continuationState != ILibChain_ContinuationState_END_CONTINUE) { return; }
root->continuationState = ILibChain_ContinuationState_CONTINUE;
currentNode = root->node;
@@ -1977,16 +1978,7 @@ ILibExportMethod void ILibChain_Continue(void *Chain, ILibChain_Link **modules,
#endif
#endif
}
nodeHook = (ILibChain_Link_Hook*)ILibLinkedList_GetExtendedMemory(chain->node);
if (nodeHook->MaxTimeout > 0 && nodeHook->MaxTimeout < chain->selectTimeout) { chain->selectTimeout = nodeHook->MaxTimeout; }
if (moduleCount > 0)
{
++mX;
}
else
{
chain->node = ILibLinkedList_GetNextNode(chain->node);
}
++mX;
}
tv.tv_sec = chain->selectTimeout / 1000;
tv.tv_usec = 1000 * (chain->selectTimeout % 1000);
@@ -2095,8 +2087,6 @@ ILibExportMethod void ILibChain_Continue(void *Chain, ILibChain_Link **modules,
}
ILibRemoteLogging_printf(ILibChainGetLogger(chain), ILibRemoteLogging_Modules_Microstack_Generic, ILibRemoteLogging_Flags_VerbosityLevel_1, "ContinueChain...Ending...");
root->continuationState = ILibChain_ContinuationState_INACTIVE;
root->node = currentNode;
}
@@ -2783,6 +2773,8 @@ ILibExportMethod void ILibStartChain(void *Chain)
tv.tv_sec = UPNP_MAX_WAIT;
tv.tv_usec = 0;
if (chain->continuationState == ILibChain_ContinuationState_END_CONTINUE) { chain->continuationState = ILibChain_ContinuationState_INACTIVE; }
//
// Iterate through all the PreSelect function pointers in the chain
//
@@ -6694,15 +6686,14 @@ void* ILibLinkedList_GetTag(ILibLinkedList list)
void* ILibLinkedList_AllocateNode(void *LinkedList)
{
void* newNode;
ILibMemory_Allocate(sizeof(ILibLinkedListNode), ILibMemory_GetExtraMemorySize(((ILibLinkedListNode_Root*)LinkedList)->ExtraMemory), &newNode, NULL);
void* newNode = ILibMemory_SmartAllocateEx(sizeof(ILibLinkedListNode), ILibMemory_GetExtraMemorySize(((ILibLinkedListNode_Root*)LinkedList)->ExtraMemory));
return(newNode);
}
void* ILibLinkedList_GetExtendedMemory(void* LinkedList_Node)
{
if (LinkedList_Node == NULL) { return(NULL); }
return(ILibMemory_GetExtraMemory(LinkedList_Node, sizeof(ILibLinkedListNode)));
if (LinkedList_Node == NULL || !ILibMemory_CanaryOK(LinkedList_Node)) { return(NULL); }
return(ILibMemory_Extra(LinkedList_Node));
}
/*! \fn ILibLinkedList_ShallowCopy(void *LinkedList)
\brief Create a shallow copy of a linked list. That is, the structure is copied, but none of the data contents are copied. The pointer values are just copied.
@@ -6881,7 +6872,7 @@ void* ILibLinkedList_Remove(void *LinkedList_Node)
}
}
--r->count;
free(n);
ILibMemory_Free(n);
return RetVal;
}

View File

@@ -310,6 +310,12 @@ int ILibIsRunningOnChainThread(void* chain);
ILibServerScope_LocalSegment=2
}ILibServerScope;
typedef enum ILibChain_ContinuationStates
{
ILibChain_ContinuationState_INACTIVE = 0,
ILibChain_ContinuationState_CONTINUE = 1,
ILibChain_ContinuationState_END_CONTINUE = 2
}ILibChain_ContinuationStates;
typedef void(*ILibChain_PreSelect)(void* object, fd_set *readset, fd_set *writeset, fd_set *errorset, int* blocktime);
typedef void(*ILibChain_PostSelect)(void* object, int slct, fd_set *readset, fd_set *writeset, fd_set *errorset);
@@ -936,6 +942,7 @@ int ILibIsRunningOnChainThread(void* chain);
ILibExportMethod void ILibStopChain(void *chain);
ILibExportMethod void ILibChain_Continue(void *chain, ILibChain_Link **modules, int moduleCount, int maxTimeout);
ILibExportMethod void ILibChain_EndContinue(void *chain);
ILibChain_ContinuationStates ILibChain_GetContinuationState(void *chain);
#define ILibChain_FreeLink(link) ((ILibChain_Link*)link)->RESERVED = 0xFFFFFFFF;free(link);
#define ILibChain_IsLinkAlive(link) (((ILibChain_Link*)link)->RESERVED == ILibMemory_Canary)
@@ -1092,6 +1099,9 @@ int ILibIsRunningOnChainThread(void* chain);
void ILibLinkedList_SetTag(ILibLinkedList list, void *tag);
void* ILibLinkedList_GetTag(ILibLinkedList list);
int ILibLinkedList_GetIndex(void *node);
extern const int ILibLinkedListNode_SIZE;
extern const int ILibLinkedListNodeRoot_Size;
//! Comparer delegate is called to compare two values. Mimics behavior of .NET IComparer..
//! obj2 == obj1 : 0