Lines Matching refs:list
320 ossl_ssize_t list = sh.freelist_size - 1;
323 for (; bit; bit >>= 1, list--) {
329 return list;
333 static int sh_testbit(char *ptr, int list, unsigned char *table)
337 OPENSSL_assert(list >= 0 && list < sh.freelist_size);
338 OPENSSL_assert(((ptr - sh.arena) & ((sh.arena_size >> list) - 1)) == 0);
339 bit = (ONE << list) + ((ptr - sh.arena) / (sh.arena_size >> list));
344 static void sh_clearbit(char *ptr, int list, unsigned char *table)
348 OPENSSL_assert(list >= 0 && list < sh.freelist_size);
349 OPENSSL_assert(((ptr - sh.arena) & ((sh.arena_size >> list) - 1)) == 0);
350 bit = (ONE << list) + ((ptr - sh.arena) / (sh.arena_size >> list));
356 static void sh_setbit(char *ptr, int list, unsigned char *table)
360 OPENSSL_assert(list >= 0 && list < sh.freelist_size);
361 OPENSSL_assert(((ptr - sh.arena) & ((sh.arena_size >> list) - 1)) == 0);
362 bit = (ONE << list) + ((ptr - sh.arena) / (sh.arena_size >> list));
368 static void sh_add_to_list(char **list, char *ptr)
372 OPENSSL_assert(WITHIN_FREELIST(list));
376 temp->next = *(SH_LIST **)list;
378 temp->p_next = (SH_LIST **)list;
381 OPENSSL_assert((char **)temp->next->p_next == list);
385 *list = ptr;
592 static char *sh_find_my_buddy(char *ptr, int list)
597 bit = (ONE << list) + (ptr - sh.arena) / (sh.arena_size >> list);
601 chunk = sh.arena + ((bit & ((ONE << list) - 1)) * (sh.arena_size >> list));
608 ossl_ssize_t list, slist;
615 list = sh.freelist_size - 1;
617 list--;
618 if (list < 0)
622 for (slist = list; slist >= 0; slist--)
629 while (slist != list) {
632 /* remove from bigger list */
638 /* done with bigger list */
641 /* add to smaller list */
658 chunk = sh.freelist[list];
659 OPENSSL_assert(sh_testbit(chunk, list, sh.bittable));
660 sh_setbit(chunk, list, sh.bitmalloc);
665 /* zero the free list header as a precaution against information leakage */
673 size_t list;
682 list = sh_getlist(ptr);
683 OPENSSL_assert(sh_testbit(ptr, list, sh.bittable));
684 sh_clearbit(ptr, list, sh.bitmalloc);
685 sh_add_to_list(&sh.freelist[list], ptr);
688 while ((buddy = sh_find_my_buddy(ptr, list)) != NULL) {
689 OPENSSL_assert(ptr == sh_find_my_buddy(buddy, list));
691 OPENSSL_assert(!sh_testbit(ptr, list, sh.bitmalloc));
692 sh_clearbit(ptr, list, sh.bittable);
694 OPENSSL_assert(!sh_testbit(ptr, list, sh.bitmalloc));
695 sh_clearbit(buddy, list, sh.bittable);
698 list--;
700 /* Zero the higher addressed block's free list pointers */
705 OPENSSL_assert(!sh_testbit(ptr, list, sh.bitmalloc));
706 sh_setbit(ptr, list, sh.bittable);
707 sh_add_to_list(&sh.freelist[list], ptr);
708 OPENSSL_assert(sh.freelist[list] == ptr);
714 int list;
719 list = sh_getlist(ptr);
720 OPENSSL_assert(sh_testbit(ptr, list, sh.bittable));
721 return sh.arena_size / (ONE << list);