Android implementation may not need it, depending on Java's assignment guarantees. Locks have perf impact.  E.g. in C language the assignment above is an atomic operation, so I can safely copy the callback pointer when I intent to use it and check the copy for null and call the copy if not. This approach has the added benefit of avoiding the lock every time we log anything (regardless of whether the callback is set). Unfortunately, in objective C the block assignment is not atomic, as explicitly confirmed by my tests.