Browse Source

Fixed ERS cache linked list algorithm.

git-svn-id: https://svn.code.sf.net/p/rathena/svn/trunk@16748 54d463be-8e91-2dee-dedb-b68131a5f0ec
greenboxal2 12 years ago
parent
commit
ee0c86082a
1 changed files with 7 additions and 6 deletions
  1. 7 6
      src/common/ers.c

+ 7 - 6
src/common/ers.c

@@ -128,8 +128,10 @@ static ers_cache_t *ers_find_cache(unsigned int size)
 	}
 	}
 	else
 	else
 	{
 	{
-		CacheList->Next = cache;
-		cache->Prev = CacheList;
+		cache->Next = CacheList;
+		cache->Next->Prev = cache;
+		CacheList = cache;
+		CacheList->Prev = NULL;
 	}
 	}
 
 
 	return cache;
 	return cache;
@@ -142,13 +144,12 @@ static void ers_free_cache(ers_cache_t *cache, bool remove)
 	for (i = 0; i < cache->Used; i++)
 	for (i = 0; i < cache->Used; i++)
 		aFree(cache->Blocks[i]);
 		aFree(cache->Blocks[i]);
 
 
-	if (cache->Prev)
-		cache->Prev->Next = cache->Next;
-
 	if (cache->Next)
 	if (cache->Next)
 		cache->Next->Prev = cache->Prev;
 		cache->Next->Prev = cache->Prev;
 
 
-	if (CacheList == cache)
+	if (cache->Prev)
+		cache->Prev->Next = cache->Next;
+	else
 		CacheList = cache->Next;
 		CacheList = cache->Next;
 
 
 	aFree(cache->Blocks);
 	aFree(cache->Blocks);