[Development] API review for a new QDnsResolver class

Craig.Scott at csiro.au Craig.Scott at csiro.au
Thu Jan 5 02:51:50 CET 2012


On 05/01/2012, at 12:11 PM, Thiago Macieira wrote:

> On Thursday, 5 de January de 2012 12.07.37, Craig.Scott at csiro.au wrote:
>> On 05/01/2012, at 11:47 AM, Thiago Macieira wrote:
>>> On Thursday, 5 de January de 2012 11.03.42, Craig.Scott at csiro.au wrote:
>>>> This could be perceived as creating a race condition. You'd have to
>>>> connect
>>>> a slot to the signal on the object returned, but what if the signal is
>>>> emitted before you get a chance to do that?
>>> 
>>> It cannot happen if you make it, by design, not possible.
>>> 
>>> That means the reply object must ensure that it never processes replies
>>> before first returning to the user. If a result was found cached (if ever
>>> there's a cache), then we need to be able to tell the user that the reply
>>> has already finished.
>> 
>> Even if it never processes replies before first returning the user, there is
>> the possibility of a race condition:
> 
> No, there isn't. Your scenario below implies the user willfully connected 
> late. All you need to do is connect the signal before returning to the event 
> loop. That's how QNetworkReply ensures it works.

Ah, the reply object emits the signal in the same thread as the caller? I was assuming the signal is emitted from within the thread that is processing the reply. Yes, in that case connecting before returning to the event loop would be sufficient.


> 
>> (1) Reply object is returned to the user.
> 
>> (2) Reply object processes the request and emits the relevant finished
>> signal in its own thread. 
> 
>> (3) Caller adds a signal-slot connection (could
>> be on the line immediately following the function call that returned the
>> reply object), but the signal has already been missed.
> 

--
Dr Craig Scott
Computational Software Engineering Team Leader, CSIRO (CMIS)
Melbourne, Australia






More information about the Development mailing list