Previous patch can not pass build because of missing virNetServerClientCheckFilterExist stated in libvirt_remote.syms
LanceLiu <liu.lance...@gmail.com> 于2019年11月25日周一 下午3:34写道: > --- > src/libvirt_remote.syms | 1 + > src/remote/remote_daemon_stream.c | 10 +++++++++- > src/rpc/virnetserverclient.c | 12 ++++++++++++ > src/rpc/virnetserverclient.h | 2 ++ > 4 files changed, 24 insertions(+), 1 deletion(-) > > diff --git a/src/libvirt_remote.syms b/src/libvirt_remote.syms > index 0493467..c32e234 100644 > --- a/src/libvirt_remote.syms > +++ b/src/libvirt_remote.syms > @@ -173,6 +173,7 @@ virNetServerClientPreExecRestart; > virNetServerClientRemoteAddrStringSASL; > virNetServerClientRemoteAddrStringURI; > virNetServerClientRemoveFilter; > +virNetServerClientCheckFilterExist; > virNetServerClientSendMessage; > virNetServerClientSetAuthLocked; > virNetServerClientSetAuthPendingLocked; > diff --git a/src/remote/remote_daemon_stream.c > b/src/remote/remote_daemon_stream.c > index 82cadb6..de0dca3 100644 > --- a/src/remote/remote_daemon_stream.c > +++ b/src/remote/remote_daemon_stream.c > @@ -292,10 +292,18 @@ daemonStreamFilter(virNetServerClientPtr client, > { > daemonClientStream *stream = opaque; > int ret = 0; > + daemonClientPrivatePtr priv = NULL; > + int filter_id = stream->filterID; > > virObjectUnlock(client); > + priv = virNetServerClientGetPrivateData(client); > virMutexLock(&stream->priv->lock); > virObjectLock(client); > + if (!virNetServerClientCheckFilterExist(client, filter_id)) { > + VIR_WARN("this daemon stream filter: %d have been deleted!", > filter_id); > + ret = -1; > + goto cleanup; > + } > > if (msg->header.type != VIR_NET_STREAM && > msg->header.type != VIR_NET_STREAM_HOLE) > @@ -317,7 +325,7 @@ daemonStreamFilter(virNetServerClientPtr client, > ret = 1; > > cleanup: > - virMutexUnlock(&stream->priv->lock); > + virMutexUnlock(&priv->lock); > return ret; > } > > diff --git a/src/rpc/virnetserverclient.c b/src/rpc/virnetserverclient.c > index 67b3bf9..f80f493 100644 > --- a/src/rpc/virnetserverclient.c > +++ b/src/rpc/virnetserverclient.c > @@ -287,6 +287,18 @@ void > virNetServerClientRemoveFilter(virNetServerClientPtr client, > virObjectUnlock(client); > } > > +int virNetServerClientCheckFilterExist(virNetServerClientPtr client, > + int filterID) > +{ > + virNetServerClientFilterPtr tmp; > + > + tmp = client->filters; > + while(tmp && tmp->id != filterID) { > + tmp = tmp->next; > + } > + > + return (tmp != NULL); > +} > > /* Check the client's access. */ > static int > diff --git a/src/rpc/virnetserverclient.h b/src/rpc/virnetserverclient.h > index 7a3061d..85fda39 100644 > --- a/src/rpc/virnetserverclient.h > +++ b/src/rpc/virnetserverclient.h > @@ -93,6 +93,8 @@ int virNetServerClientAddFilter(virNetServerClientPtr > client, > > void virNetServerClientRemoveFilter(virNetServerClientPtr client, > int filterID); > +int virNetServerClientCheckFilterExist(virNetServerClientPtr client, > + int filterID); > > int virNetServerClientGetAuth(virNetServerClientPtr client); > void virNetServerClientSetAuthLocked(virNetServerClientPtr client, int > auth); > -- > 1.8.3.1 > >
-- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list