00075 {
00076 struct OIDFunctionSet *setCursor, *setNext;
00077
00078 LIST_FOR_EACH_ENTRY_SAFE(setCursor, setNext, &funcSets,
00079 struct OIDFunctionSet, next)
00080 {
00081 struct OIDFunction *functionCursor, *funcNext;
00082
00083 list_remove(&setCursor->next);
00084 CryptMemFree(setCursor->name);
00085 LIST_FOR_EACH_ENTRY_SAFE(functionCursor, funcNext,
00086 &setCursor->functions, struct OIDFunction, next)
00087 {
00088 list_remove(&functionCursor->next);
00089 CryptMemFree(functionCursor);
00090 }
00091 setCursor->cs.DebugInfo->Spare[0] = 0;
00092 DeleteCriticalSection(&setCursor->cs);
00093 CryptMemFree(setCursor);
00094 }
00095 DeleteCriticalSection(&funcSetCS);
00096 }