avoid deadlocks: always prefer using a QMutexLocker to lock()/unlock() pairs (in case something bad happens before the unlock). Don’t use pointers in renderInstancesFullySafePerFrameMutexes: this makes the code simpler and avoids memory leaks (the QMutex* were never deleted)!