| 1062 | } |
| 1063 | |
| 1064 | static void |
| 1065 | arena_bin_reset(tsd_t *tsd, arena_t *arena, bin_t *bin) { |
| 1066 | extent_t *slab; |
| 1067 | |
| 1068 | malloc_mutex_lock(tsd_tsdn(tsd), &bin->lock); |
| 1069 | if (bin->slabcur != NULL) { |
| 1070 | slab = bin->slabcur; |
| 1071 | bin->slabcur = NULL; |
| 1072 | malloc_mutex_unlock(tsd_tsdn(tsd), &bin->lock); |
| 1073 | arena_slab_dalloc(tsd_tsdn(tsd), arena, slab); |
| 1074 | malloc_mutex_lock(tsd_tsdn(tsd), &bin->lock); |
| 1075 | } |
| 1076 | while ((slab = extent_heap_remove_first(&bin->slabs_nonfull)) != NULL) { |
| 1077 | malloc_mutex_unlock(tsd_tsdn(tsd), &bin->lock); |
| 1078 | arena_slab_dalloc(tsd_tsdn(tsd), arena, slab); |
| 1079 | malloc_mutex_lock(tsd_tsdn(tsd), &bin->lock); |
| 1080 | } |
| 1081 | for (slab = extent_list_first(&bin->slabs_full); slab != NULL; |
| 1082 | slab = extent_list_first(&bin->slabs_full)) { |
| 1083 | arena_bin_slabs_full_remove(arena, bin, slab); |
| 1084 | malloc_mutex_unlock(tsd_tsdn(tsd), &bin->lock); |
| 1085 | arena_slab_dalloc(tsd_tsdn(tsd), arena, slab); |
| 1086 | malloc_mutex_lock(tsd_tsdn(tsd), &bin->lock); |
| 1087 | } |
| 1088 | if (config_stats) { |
| 1089 | bin->stats.curregs = 0; |
| 1090 | bin->stats.curslabs = 0; |
| 1091 | } |
| 1092 | malloc_mutex_unlock(tsd_tsdn(tsd), &bin->lock); |
| 1093 | } |
| 1094 | |
| 1095 | void |
| 1096 | arena_reset(tsd_t *tsd, arena_t *arena) { |
no test coverage detected