I've noticed the CCTextureCache class uses a few NSLocks to ensure textures don't load simultaneously, namely contextLock in addImageWithAsyncObject.
Is this really required, can't we have the lock only around the eventual glGenTextures/glTexImage2D calls? Is it really necessary for all the other functionality involved in texture creation (UIImage creation, reading into memory, all the CoreGraphics functions, setting the pixel format, etc.) to be in a critical section?