Merge pull request #1455 from esdrubal/caching
[mono.git] / mono / metadata / sgen-los.c
index c04da2545f5d69610fc4cc3195105c1cab3b9667..dc104a0a8cd2accf415b382e86590aada62b12be 100644 (file)
@@ -38,6 +38,7 @@
 #include "metadata/sgen-cardtable.h"
 #include "metadata/sgen-memory-governor.h"
 #include "utils/mono-mmap.h"
+#include "utils/mono-compiler.h"
 
 #define LOS_SECTION_SIZE       (1024 * 1024)
 
@@ -67,7 +68,7 @@ struct _LOSFreeChunks {
 typedef struct _LOSSection LOSSection;
 struct _LOSSection {
        LOSSection *next;
-       int num_free_chunks;
+       size_t num_free_chunks;
        unsigned char *free_chunk_map;
 };
 
@@ -143,7 +144,7 @@ los_consistency_check (void)
 static void
 add_free_chunk (LOSFreeChunks *free_chunks, size_t size)
 {
-       int num_chunks = size >> LOS_CHUNK_BITS;
+       size_t num_chunks = size >> LOS_CHUNK_BITS;
 
        free_chunks->size = size;
 
@@ -158,7 +159,8 @@ get_from_size_list (LOSFreeChunks **list, size_t size)
 {
        LOSFreeChunks *free_chunks = NULL;
        LOSSection *section;
-       int num_chunks, i, start_index;
+       size_t i, num_chunks, start_index;
+
 
        g_assert ((size & (LOS_CHUNK_SIZE - 1)) == 0);
 
@@ -198,7 +200,7 @@ get_los_section_memory (size_t size)
 {
        LOSSection *section;
        LOSFreeChunks *free_chunks;
-       int num_chunks;
+       size_t num_chunks;
 
        size += LOS_CHUNK_SIZE - 1;
        size &= ~(LOS_CHUNK_SIZE - 1);
@@ -212,7 +214,7 @@ get_los_section_memory (size_t size)
        if (num_chunks >= LOS_NUM_FAST_SIZES) {
                free_chunks = get_from_size_list (&los_fast_free_lists [0], size);
        } else {
-               int i;
+               size_t i;
                for (i = num_chunks; i < LOS_NUM_FAST_SIZES; ++i) {
                        free_chunks = get_from_size_list (&los_fast_free_lists [i], size);
                        if (free_chunks)
@@ -257,7 +259,7 @@ static void
 free_los_section_memory (LOSObject *obj, size_t size)
 {
        LOSSection *section = LOS_SECTION_FOR_OBJ (obj);
-       int num_chunks, i, start_index;
+       size_t num_chunks, i, start_index;
 
        size += LOS_CHUNK_SIZE - 1;
        size &= ~(LOS_CHUNK_SIZE - 1);
@@ -335,13 +337,13 @@ sgen_los_alloc_large_inner (MonoVTable *vtable, size_t size)
        g_assert ((size & 1) == 0);
 
        /*
-        * size + sizeof (LOSObject) <= SIZE_MAX - (mono_pagesize () - 1)
+        * size + sizeof (LOSObject) <= SSIZE_MAX - (mono_pagesize () - 1)
         *
         * therefore:
         *
-        * size <= SIZE_MAX - (mono_pagesize () - 1) - sizeof (LOSObject)
+        * size <= SSIZE_MAX - (mono_pagesize () - 1) - sizeof (LOSObject)
         */
-       if (size > SIZE_MAX - (mono_pagesize () - 1) - sizeof (LOSObject))
+       if (size > SSIZE_MAX - (mono_pagesize () - 1) - sizeof (LOSObject))
                return NULL;
 
 #ifdef LOS_DUMMY