Right. I dispatch the block on the main thread to solve the reentrancy issues 
as stated below. The serial queue is involved elsewhere.


On 15 mai 2013, at 16:12, Ken Thomases wrote:

> On May 15, 2013, at 8:58 AM, Jean Suisse wrote:
> 
>> Thanks for your replies.
>> Unfortunately, I can't easily avoid 
>> initWithHTML:dataUsingEncoding:documentAttributes: 
>> But I can postpone it long enough to move its execution to an other thread 
>> (serial dispatch queue).
>> That solves the issue.
> 
> I doubt it will.  If that method is invoked from a background thread, it will 
> shunt the work to the main thread anyway.  In other words, it always does its 
> work on the main thread.
> 
> Regards,
> Ken
> 


On 8 may 2013, at 01:06, Jean Suisse wrote:

> Thanks for this suggestion. Actually, once identified, I fixed the bug fairly 
> quickly by postponing the task (dispatched a block on the main thread for 
> that).
> The bug was caused by two successive events arriving in a short timeframe so 
> that the stack looked like that:
> 
> 0 my callback
> 1 __CFSocketPerformV0
> ------------------------------------
> 9 initWithHTML:dataUsingEncoding:documentAttributes:
> 10 my function 1
> 11 my function 2
> 12 my callback
> 13 __CFSocketPerformV0
> -----------------------------------
> 23 NSApplicationMain
> 24 main
> 25 Start
> 
> and my callback never was designed to be called a second time before the 
> first call was finished. Dispatching a block to handle my function 1 fixed 
> the issue.
> However, information about initWithHTML:dataUsingEncoding:documentAttributes: 
> running an event loop could be worth mentioning in the docs…
> 
> Jean
> 
> On 8 mai 2013, at 00:52, Ken Thomases wrote:
> 
>> On May 7, 2013, at 5:37 PM, Jean Suisse wrote:
>> 
>>> By any chance, could a call to [[NSAttributedString alloc] 
>>> initWithHTML:dataUsingEncoding:documentAttributes:] lead to the event loop 
>>> being run before the call returns?
>> 
>> Yes, it can.  Under the hood, NSAttributedString is using WebKit for HTML 
>> rendering.  In part that means that, when invoked from a background thread, 
>> it has to shunt the work to the main thread.  But it also means the main 
>> thread may have to run the run loop during the call.  It's a nuisance, but 
>> it's necessary since HTML can have references to external resources that 
>> need to be loaded.
>> 
>> Consider the other method, -[NSAttributedString 
>> initWithHTML:options:documentAttributes:] and its options dictionary, which 
>> can have keys like NSTimeoutDocumentOption and 
>> NSWebResourceLoadDelegateDocumentOption.  Those imply a pretty involved 
>> process under the hood.  I'm fairly certain that this method is used for the 
>> implementation of the method you're using.
>> 
>> You may be able to use those options to minimize the use of the run loop, 
>> but probably not eliminate it.
>> 
>> Regards,
>> Ken
>> 
> 
> -----------
> Jean Suisse
> Institut de Chimie Moléculaire de l’Université de Bourgogne
> (ICMUB) — UMR 6302
> 

_______________________________________________

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