+ } else if (sh->sh_stack) {
+ tmpp = (ber_len_t *)((char *)ptr + p[-1]);
+ /* mark it free */
+ tmpp[-1] |= 1;
+ /* reclaim free space off tail */
+ while ( tmpp == sh->sh_last ) {
+ if ( tmpp[-1] & 1 ) {
+ size = tmpp[-1] ^ 1;
+ ptr = (char *)tmpp - size;
+ p = (ber_len_t *)ptr;
+ p--;
+ sh->sh_last = p;
+ tmpp = sh->sh_last;
+ } else {
+ break;
+ }
+ }
+ } else {
+ int size_shift, order_size;
+ int pad = 2*sizeof(int)-1, pad_shift;
+ int order_start = -1, order = -1;
+ struct slab_object *so;
+ unsigned long diff;
+ int i, inserted = 0;
+