Previous patch can not pass build because of missing virNetServerClientCheckFilterExist stated in libvirt_remote.syms

LanceLiu <liu.lance.89@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