blob: c9ef36a1b7d1a055fe5d6322b5c021ce43227dfe [file] [log] [blame]
#import "Launcher.h"
#define FOREVER ((CFTimeInterval) 1e20)
static void timer_empty(CFRunLoopTimerRef timer, void *info) {
}
static void parkRunLoop() {
CFRunLoopTimerRef t = CFRunLoopTimerCreate(kCFAllocatorDefault, FOREVER, (CFTimeInterval)0.0, 0, 0, timer_empty, NULL);
CFRunLoopAddTimer(CFRunLoopGetCurrent(), t, kCFRunLoopDefaultMode);
CFRelease(t);
SInt32 result;
do {
result = CFRunLoopRunInMode(kCFRunLoopDefaultMode, FOREVER, false);
} while (result != kCFRunLoopRunFinished);
}
static void makeSameStackSize(NSThread *thread) {
struct rlimit l;
int err = getrlimit(RLIMIT_STACK, &l);
if (err == ERR_SUCCESS && l.rlim_cur > 0) {
thread.stackSize = (NSUInteger) l.rlim_cur;
}
}
static void launchInNewThread(Launcher *launcher) {
NSThread *thread = [[[NSThread alloc] initWithTarget:launcher selector:@selector(launch) object:nil] autorelease];
makeSameStackSize(thread);
[thread start];
}
int main(int argc, char *argv[]) {
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
launchInNewThread([[[Launcher alloc] initWithArgc:argc argv:argv] autorelease]);
parkRunLoop();
[pool release];
return 0;
}