Too long for a comment, so apologies this is an answer..
IMO, any design which calls for recursive locking is likely to end nasal daemons. Redesign you code so that the same lock does not have to be acquired multiple times by the same thread. IMO a good practice is to never call public functions (which should lock) from other public functions (which also lock), and all private functions should never lock - i.e. they can only be called by the public methods (which are locked).
So re-organize your code such that methods called in the context of the same thread have one entry point into your object, which then locks, and any subsequent private function calls can operate under this lock. There are some disadvantages with this approach (for example multiple lock operations for sequential function calls - but if this is proved to be a bottleneck via profiling, then adopt a pattern where you expose the mutex via a member, and as one person mentioned already use RAII to lock that lock for the duration of the function calls.)
All-in-all, avoid recursive mutexes if you can...