the -rollOver method in L4RollingFileAppender, when it gets around to removing a previous log file, can hang in a mutex if not called on a main thread.
Our app makes several log4XXXX calls during startup from several different threads. If the -rollOver method on L4RollingFileAppender is called from a background thread, and it tries to remove a previous log file with -removeItemAtPath:error:, the Cocoa internal code tries to create an NSOperation, and spin locks on a mutex. When we try to make a log4xxxx call in the main thread, that spin locks the application because the -removeItemAtPath:error: call can't get the main thread while we're waiting for the call to return. Classic deadlock.
Adding an:
if (![NSThread isMainThread]) {
[self performSelectorOnMainThread:@selector(rollOver) withObject:nil waitUntilDone:NO];
return;
}
to the start of -rollOver fixes the problem for us.
View and moderate all "bugs Discussion" comments posted by this user
Mark all as spam, and block user from posting to "Bugs"
the diff file