I would probably implement this the other way around.  Since pending is "this" (well, the backing store) we should do:

  pending.shareFreeList(q);

to mirror the intent of the caller of invoking this.shareFreeList(q).

Its a subtle issue about how we are discarding a potentially large free list from the bottom of the stack by pushing down an empty free list from the top of the stack.  Weird, I know.  But at least mirror the caller's intent.