On 15 Sep 2013, at 16:42, Jean-Daniel Dupas <devli...@shadowlab.org> wrote:

> XPC is based on GCD. There is chance that your request handling occurs in a 
> GCD thread and not on the main thread.

Correct. NSThread tells me:
mainThread              <NSThread: 0x7f92b14096a0>{name = (null), num = 1} 
currentThread   <NSThread: 0x7f92b3502cf0>{name = (null), num = 2}


> [NSRunLoop currentRunLoop] returns the current thread run loop. If you are 
> not on the main thread, it will not work.

NSRunLoop *currentRunLoop = [ NSRunLoop currentRunLoop ];
CFRunLoopRef rl1 = [ currentRunLoop getCFRunLoop ];             //      mode = 
nil

CFRunLoopRef rl2 = CFRunLoopGetMain ();                         //      mode = 
kCFRunLoopDefaultMode


> Try that instead: CFRunLoopStop(CFRunLoopGetMain());
Tried it. Even tried stopping both run loops, but to no avail. The helper tool 
just will not quit.

But maybe I will be able to make my NSTimers work now having a better 
understanding of what is going on.

Thanks!

Gerriet.


> Le 15 sept. 2013 à 10:32, Gerriet M. Denkmann <gerr...@mdenkmann.de> a écrit :
> 
>> I have a Helper Tool, running as root, started via SMJobBless and 
>> communicating vie Xpc.
>> 
>> Works fine, but:
>> 1. it cannot stop (CFRunLoopStop),
>> 2. Timers never fire
>> 3. NSRunLoop currentMode returns nil.
>> 
>> Maybe all three things are related.
>> 
>> To 1:
>> 
>> if ( asked to quit )
>> {
>>      NSRunLoop *currentRunLoop = [ NSRunLoop currentRunLoop ];
>>      CFRunLoopRef rl = [ currentRunLoop getCFRunLoop ];
>>      NSLog(@"%s will stop runloop %p",__FUNCTION__, rl);     //      rl ≠ 
>> NULL
>>      CFRunLoopStop ( rl );           //      runLoop will NOT stop
>> }
>> 
>> Helper Tool main:
>> 
>> int main(int argc, const char * argv[])
>> {
>>      @autoreleasepool
>>      {
>>              NSString * bundleIdentifier = [[NSBundle mainBundle] 
>> bundleIdentifier];         
>>              NSXPCListener *listener = [[NSXPCListener alloc] 
>> initWithMachServiceName: bundleIdentifier ];
>>              listener.delegate = ...;
>>              [listener resume];
>>              NSRunLoop *currentRunLoop = [NSRunLoop currentRunLoop];
>>              [ currentRunLoop run ];
>>      }
>>      
>>   return EXIT_SUCCESS;
>> }

_______________________________________________

Cocoa-dev mailing list (Cocoa-dev@lists.apple.com)

Please do not post admin requests or moderator comments to the list.
Contact the moderators at cocoa-dev-admins(at)lists.apple.com

Help/Unsubscribe/Update your Subscription:
https://lists.apple.com/mailman/options/cocoa-dev/archive%40mail-archive.com

This email sent to arch...@mail-archive.com

Reply via email to