|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [RFC PATCH v1 03/25] hw/xen: Implement XenStore watches
On Tue, 2023-03-07 at 11:29 +0000, Paul Durrant wrote:
>
> I think you could stash a tail pointer here...
>
> > + }
> > +
> > + if (dom_id && s->nr_domu_watches >= XS_MAX_WATCHES) {
> > + return E2BIG;
> > + }
> > +
> > + w = g_new0(XsWatch, 1);
> > + w->token = g_strdup(token);
> > + w->cb = fn;
> > + w->cb_opaque = opaque;
> > + w->dom_id = dom_id;
> > + w->rel_prefix = strlen(abspath) - strlen(path);
> > +
> > + l = g_hash_table_lookup(s->watches, abspath);
>
> ... to avoid the duplicate hash lookup here.
Good point. The EEXIST check was added later as I was reviewing and
comparing with the real xenstored, so I didn't spot that. Thanks.
--- a/hw/i386/kvm/xenstore_impl.c
+++ b/hw/i386/kvm/xenstore_impl.c
@@ -673,7 +673,7 @@ int xs_impl_watch(XenstoreImplState *s, unsigned int
dom_id, const char *path,
}
/* Check for duplicates */
- w = g_hash_table_lookup(s->watches, abspath);
+ l = w = g_hash_table_lookup(s->watches, abspath);
while (w) {
if (!g_strcmp0(token, w->token) && opaque == w->cb_opaque &&
fn == w->cb && dom_id == w->dom_id) {
@@ -693,7 +693,7 @@ int xs_impl_watch(XenstoreImplState *s, unsigned int
dom_id, const char *path,
w->dom_id = dom_id;
w->rel_prefix = strlen(abspath) - strlen(path);
- l = g_hash_table_lookup(s->watches, abspath);
+ /* l was looked up above when checking for duplicates */
if (l) {
w->next = l->next;
l->next = w;
Attachment:
smime.p7s
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |