And with the mid-function returns, life will be easier with scoped Mutex::Lockers instead of trying to manually unlock correctly everywhere.
(You might also look at use of goto and a "fail" label, but I encourage use of C++ over jumping.)