[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Xen-devel] [PATCH] libxenstore: filter watch events in libxenstore when we unwatch



On Fri, Sep 21, 2012 at 5:28 PM, Ian Jackson <Ian.Jackson@xxxxxxxxxxxxx> wrote:
> Julien Grall writes ("Re: [PATCH] libxenstore: filter watch events in 
> libxenstore when we unwatch"):
>> On 09/21/2012 04:45 PM, Ian Jackson wrote:
>> > The num_strings thing is obsolete.  There will always be two strings.
>> > Also xs_count_strings walks the array.
>>
>> >> +  /* Clear the pipe token if there are no more pending watches. */
>> >> +  if (list_empty(&h->watch_list) && (h->watch_pipe[0] != -1)) {
>> >> +          while (read(h->watch_pipe[0], &c, 1) != 1)
>> >> +                  continue;
>> >> +  }
>> >
>> > I'm not convinced this is necessary.  Don't callers already need to
>> > cope with potential spurious signallings of the watch pipe ?
>>
>> I base my code on xs_read_watch. As I understand xs_read_watch, it will
>> wait on a condition until the list is not empty.
>> So if the list is empty and not the pipe, an event can occur and block
>> the application (with xs_read_watch).
>
> xs_read_watch can only be correctly be used if you are determined to
> wait, right there, until a particular watch turns up.
>
> If you are using xs_fileno, you must do as the comment says:
>  * Callers should, after xs_fileno has become readable, repeatedly
>  * call xs_check_watch until it returns NULL and sets errno to EAGAIN.
>  * (If the fd became readable, xs_check_watch is allowed to make it no
>  * longer show up as readable even if future calls to xs_check_watch
>  * will return more watch events.)

The function xs_check_watch was recently introduced in Xen (see your
commit on december 2011).
Most of application, for instance QEMU, still use xs_read_watch.
So if xs_unwatch doesn't empty the pipe, most of this applications
potentially stall indefinitly.

IMHO, this piece of code is really important.

Sincerely yours,

-- 
Grall Julien

_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
http://lists.xen.org/xen-devel


 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.