File tree 2 files changed +15
-18
lines changed
2 files changed +15
-18
lines changed Original file line number Diff line number Diff line change @@ -188,40 +188,27 @@ static inline void hlist_del_init(struct hlist_node *n)
188
188
189
189
cache_t * cache_create (int size_bits )
190
190
{
191
+ int i ;
191
192
cache_t * cache = malloc (sizeof (cache_t ));
192
193
if (!cache )
193
194
return NULL ;
194
195
cache_size_bits = size_bits ;
195
196
cache_size = 1 << size_bits ;
196
- for (int i = 0 ; i < THRESHOLD ; i ++ ) {
197
+ for (i = 0 ; i < THRESHOLD ; i ++ ) {
197
198
cache -> lists [i ] = malloc (sizeof (struct list_head ));
198
199
if (!cache -> lists [i ]) {
199
- for (int j = 0 ; j < i ; j ++ ) {
200
- free (cache -> lists [j ]);
201
- }
202
- return NULL ;
200
+ goto free_lists ;
203
201
}
204
202
INIT_LIST_HEAD (cache -> lists [i ]);
205
203
}
206
204
207
205
cache -> map = malloc (sizeof (hashtable_t ));
208
206
if (!cache -> map ) {
209
- for (int i = 0 ; i < THRESHOLD ; i ++ ) {
210
- free (cache -> lists [i ]);
211
- }
212
- free (cache -> lists );
213
- free (cache );
214
- return NULL ;
207
+ goto free_lists ;
215
208
}
216
209
cache -> map -> ht_list_head = malloc (cache_size * sizeof (struct hlist_head ));
217
210
if (!cache -> map -> ht_list_head ) {
218
- free (cache -> map );
219
- for (int i = 0 ; i < THRESHOLD ; i ++ ) {
220
- free (cache -> lists [i ]);
221
- }
222
- free (cache -> lists );
223
- free (cache );
224
- return NULL ;
211
+ goto free_map ;
225
212
}
226
213
for (uint32_t i = 0 ; i < cache_size ; i ++ ) {
227
214
INIT_HLIST_HEAD (& cache -> map -> ht_list_head [i ]);
@@ -231,6 +218,15 @@ cache_t *cache_create(int size_bits)
231
218
mpool_create (cache_size * sizeof (lfu_entry_t ), sizeof (lfu_entry_t ));
232
219
cache -> capacity = cache_size ;
233
220
return cache ;
221
+
222
+ free_map :
223
+ free (cache -> map );
224
+ free_lists :
225
+ for (int j = 0 ; j < i ; j ++ )
226
+ free (cache -> lists [i ]);
227
+
228
+ free (cache );
229
+ return NULL ;
234
230
}
235
231
236
232
void * cache_get (cache_t * cache , uint32_t key )
Original file line number Diff line number Diff line change @@ -136,6 +136,7 @@ riscv_t *rv_create(const riscv_io_t *io,
136
136
#else
137
137
rv -> jit_state = jit_state_init (CODE_CACHE_SIZE );
138
138
rv -> block_cache = cache_create (BLOCK_MAP_CAPACITY_BITS );
139
+ assert (rv -> block_cache );
139
140
#endif
140
141
/* reset */
141
142
rv_reset (rv , 0U , argc , args );
You can’t perform that action at this time.
0 commit comments