422{
424 NSAutoreleasePool *rootPool =
nil, *pool =
nil;
426
427 rootPool = [[NSAutoreleasePool alloc] init];
428 [NSThread ooSetCurrentThreadName:@"loggerThread"];
429
430
431 [messageQueue retain];
432 [threadStateMonitor lock];
433 [threadStateMonitor unlockWithCondition:kConditionWorking];
434
435 @try
436 {
437 for (;;)
438 {
439 pool = [[NSAutoreleasePool alloc] init];
440
441 message = [messageQueue dequeue];
442
443 if (!
sSaturated && [message isKindOfClass:[NSData class]])
444 {
445 size += [message length];
447 {
449#if OOLITE_WINDOWS
450 message = @"\r\n\r\n\r\n***** LOG TRUNCATED DUE TO EXCESSIVE LENGTH *****\r\n";
451#else
452 message = @"\n\n\n***** LOG TRUNCATED DUE TO EXCESSIVE LENGTH *****\n";
453#endif
454 message = [message dataUsingEncoding:NSUTF8StringEncoding];
455 }
456
457 [logFile writeData:message];
458 }
459 else if ([message isEqual:@"flush"])
460 {
461 [logFile synchronizeFile];
462 }
463 else if ([message isEqual:@"die"])
464 {
465 break;
466 }
467
468 [pool release];
469 }
470 }
471 @catch (NSException *exception) {}
472 [pool release];
473
474
475 [messageQueue release];
476 [threadStateMonitor lock];
477 [threadStateMonitor unlockWithCondition:kConditionReadyToDealloc];
478
479 [rootPool release];
480}