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

Re: [Xen-devel] [PATCH 15/15] libxl: New event generation API



Stefano Stabellini writes ("Re: [Xen-devel] [PATCH 15/15] libxl: New event 
generation API"):
> On Mon, 5 Dec 2011, Ian Jackson wrote:
> > +    LIBXL_TAILQ_INSERT_SORTED(&ctx->death_list, entry, evg, evg_search, ,
> 
> is this a mistake?                                                        ^

No.  It's a parameter to allow the macro's caller to introduce
variable declarations and arbitrary code into the search loop, for the
benefit of their predicate.  We don't need it here.

I've added   /*empty*/  in the empty parameter to avoid people
tripping over it.

> > +void libxl__event_occurred(libxl__gc *gc, libxl_event *event) {
> > +    if (CTX->event_hooks &&
> > +        (CTX->event_hooks->event_occurs_mask & (1UL << event->type))) {
> > +        /* libxl__free_all will call the callback, just before exit
> > +         * from libxl.
> 
> Please extend this comment: "just before leaving libxl to go back to the
> caller".  Also, even though libxl__free_all might be the right place to
> call the callbacks, the name of the function (libxl__free_all) won't
> completely reflect its behaviour anymore. Maybe we need to rename
> libxl__free_all?

Yes, I think you're probably right.  I'll add a patch to rename it to
libxl__gc_cleanup, which I think is the best name I can think of for
the moment.

> > +int libxl_event_check(libxl_ctx *ctx, libxl_event **event_r,
> > +                      unsigned long typemask,
> > +                      libxl_event_predicate *pred, void *pred_user) {
> > +    GC_INIT(ctx);
> > +    CTX_LOCK;
> > +    int rc = event_check_unlocked(gc, event_r, typemask, pred, pred_user);
> > +    CTX_UNLOCK;
> > +    GC_FREE;
> > +    return rc;
> > +}
> 
> I think it is confusing to call event_check_*unlocked* from within
> CTX_LOCK/CTX_UNLOCK.

I'm open to other suggestions for the name of these functions, but I
got the naming pattern from stdio.  From man getc_unlocked(3) on
squeeze:

 UNLOCKED_STDIO(3)          Linux Programmer's Manual         UNLOCKED_STDIO(3)
 ...
        int getc_unlocked(FILE *stream);
        int getchar_unlocked(void);
        int putc_unlocked(int c, FILE *stream);
 ...
 DESCRIPTION
        Each of these functions has the same behavior as its counterpart  with-
        out  the  "_unlocked" suffix, except that they do not use locking (they
        do not set locks themselves, and do not test for the presence of  locks
        set by others) and hence are thread-unsafe.  See flockfile(3).

Now Linux and Xen have a tendency, when they need a name for an
unlocked version of foo, to use the name _foo.  Obviously this is no
good in a userspace program and anyway I think it is a completely
ridiculous convention.  We need something much clearer.

foo_internal is a possibility but that merely suggests that the
GC_INIT has been done, and doesn't make it 100% clear that the caller
must already have done CTX_LOCK.

Thanks,
Ian.

_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-devel


 


Rackspace

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