Attached is an updated version of Charles-François's reinit_locks.diff.
Changes:
* Handles RLock by assuming that if self->count != 0 when we acquire
the lock, then the lock must have been reinitialized by PyThread_ReInitLocks().
* Applies existing fork tests for Lock to RLock.
* Fixes capitalization issues with PyThread_ReInitLocks()/PyThread_ReinitLocks().
* Defines PyThread_ReInitLocks() to be empty on non-pthread platforms.
Note that RLock._is_owned() is unreliable after a fork until RLock.acquire() has been called.
Also, no synchronization has been added for the list of locks. Are PyThread_allocate_lock() and PyThread_free_lock() supposed to be safe to call while not holding the GIL?