I'm curious - why are Py_BEGIN_ALLOW_THREADS and Py_END_ALLOW_THREADS commented out (and otherwise missing) in surface.c? It seems like those would be the most expensive functions, and hence the ones that would benefit most from running in a threaded environment.
They're used in many other parts of pygame.