Code:
list_add_item_head(&surfaces,s);
is
very quick.
Code:
Prototype void object_add_surfaces(ACObject *ob, List *l);
adds each surface to the start of the surface list with list_add_item_head. (it sets the surface's owner for each too)
It looks like you have optimal code here. Perhaps there is something else causing a slowdown?
Andy