libpurple/memorypool.c

changeset 35662
33bfffdb9e63
parent 35653
b4a35c405e95
child 35666
ca4afaddaffa
equal deleted inserted replaced
35659:f97feb9a67f2 35662:33bfffdb9e63
28 (G_TYPE_INSTANCE_GET_PRIVATE((obj), PURPLE_TYPE_MEMORY_POOL, PurpleMemoryPoolPrivate)) 28 (G_TYPE_INSTANCE_GET_PRIVATE((obj), PURPLE_TYPE_MEMORY_POOL, PurpleMemoryPoolPrivate))
29 #define PURPLE_MEMORY_POOL_BLOCK_PADDING (sizeof(guint64)) 29 #define PURPLE_MEMORY_POOL_BLOCK_PADDING (sizeof(guint64))
30 #define PURPLE_MEMORY_POINTER_SHIFT(pointer, value) \ 30 #define PURPLE_MEMORY_POINTER_SHIFT(pointer, value) \
31 (gpointer)((guintptr)(pointer) + (value)) 31 (gpointer)((guintptr)(pointer) + (value))
32 #define PURPLE_MEMORY_PADDED(pointer, padding) \ 32 #define PURPLE_MEMORY_PADDED(pointer, padding) \
33 (gpointer)(((guintptr)(pointer) - 1) % (padding) + 1) 33 (gpointer)((((guintptr)(pointer) - 1) / (padding) + 1) * padding)
34 34
35 #define PURPLE_MEMORY_POOL_DEFAULT_BLOCK_SIZE 1024 35 #define PURPLE_MEMORY_POOL_DEFAULT_BLOCK_SIZE 1024
36 36
37 typedef struct _PurpleMemoryPoolBlock PurpleMemoryPoolBlock; 37 typedef struct _PurpleMemoryPoolBlock PurpleMemoryPoolBlock;
38 38
75 * PURPLE_MEMORY_POOL_BLOCK_PADDING, but we guarantee, there is at least 75 * PURPLE_MEMORY_POOL_BLOCK_PADDING, but we guarantee, there is at least
76 * block_size long block if padded to that value. */ 76 * block_size long block if padded to that value. */
77 block->available_ptr = PURPLE_MEMORY_POINTER_SHIFT(block_raw, 77 block->available_ptr = PURPLE_MEMORY_POINTER_SHIFT(block_raw,
78 sizeof(PurpleMemoryPoolBlock)); 78 sizeof(PurpleMemoryPoolBlock));
79 block->end_ptr = PURPLE_MEMORY_POINTER_SHIFT(block_raw, total_size); 79 block->end_ptr = PURPLE_MEMORY_POINTER_SHIFT(block_raw, total_size);
80 80 block->next = NULL;
81 memset(block, 0, sizeof(PurpleMemoryPoolBlock));
82 81
83 return block; 82 return block;
84 } 83 }
85 84
86 static gpointer 85 static gpointer
90 PurpleMemoryPoolBlock *blk; 89 PurpleMemoryPoolBlock *blk;
91 gpointer mem = NULL; 90 gpointer mem = NULL;
92 91
93 g_return_val_if_fail(priv != NULL, NULL); 92 g_return_val_if_fail(priv != NULL, NULL);
94 93
94 g_return_val_if_fail(alignment <= PURPLE_MEMORY_POOL_BLOCK_PADDING, NULL);
95 g_warn_if_fail(alignment >= 1); 95 g_warn_if_fail(alignment >= 1);
96 if (alignment < 1) 96 if (alignment < 1)
97 alignment = 1; 97 alignment = 1;
98 98
99 blk = priv->last_block; 99 blk = priv->last_block;

mercurial