]> xenbits.xensource.com Git - libvirt.git/commitdiff
rpc: virnetserver: Support retrieval of a list of clients
authorErik Skultety <eskultet@redhat.com>
Thu, 14 Apr 2016 22:21:05 +0000 (00:21 +0200)
committerErik Skultety <eskultet@redhat.com>
Mon, 2 May 2016 20:26:23 +0000 (22:26 +0200)
For now, the list copy is done simply by locking the whole server, walking the
original and increasing the refcount on each object. We may want to change
the list to a lockable object (like list of domains) later in the future if
we discover some performance issues related to locking the whole server in
order to walk the whole list of clients, possibly issuing some 'ForEach'
callback.

Signed-off-by: Erik Skultety <eskultet@redhat.com>
src/libvirt_remote.syms
src/rpc/virnetserver.c
src/rpc/virnetserver.h

index c04987447f67f32f7bd0f3c88a4ea0774aaebe74..ea92043e80cf6f3f181dfe89effbbea9bbfa1c68 100644 (file)
@@ -101,6 +101,7 @@ virNetServerAddClient;
 virNetServerAddProgram;
 virNetServerAddService;
 virNetServerClose;
+virNetServerGetClients;
 virNetServerGetName;
 virNetServerHasClients;
 virNetServerNew;
index 8216da6c2bb032d3cbd882dd473c18902c685f34..fcc79f4c1e8dadef8b700359290f64aecd6e8c85 100644 (file)
@@ -943,3 +943,32 @@ virNetServerSetThreadPoolParameters(virNetServerPtr srv,
     virObjectUnlock(srv);
     return ret;
 }
+
+int
+virNetServerGetClients(virNetServerPtr srv,
+                       virNetServerClientPtr **clts)
+{
+    int ret = -1;
+    size_t i;
+    size_t nclients = 0;
+    virNetServerClientPtr *list = NULL;
+
+    virObjectLock(srv);
+
+    for (i = 0; i < srv->nclients; i++) {
+        virNetServerClientPtr client = virObjectRef(srv->clients[i]);
+        if (VIR_APPEND_ELEMENT(list, nclients, client) < 0) {
+            virObjectUnref(client);
+            goto cleanup;
+        }
+    }
+
+    *clts = list;
+    list = NULL;
+    ret = nclients;
+
+ cleanup:
+    virObjectListFreeCount(list, nclients);
+    virObjectUnlock(srv);
+    return ret;
+}
index 2ae89cefcc1aeb39d194291c793d6ba3bc1b0b60..f5bb20052ad578c44bed24105c74e03ef9c8dd17 100644 (file)
@@ -105,4 +105,7 @@ int virNetServerSetThreadPoolParameters(virNetServerPtr srv,
 
 unsigned long long virNetServerNextClientID(virNetServerPtr srv);
 
+int virNetServerGetClients(virNetServerPtr srv,
+                           virNetServerClientPtr **clients);
+
 #endif /* __VIR_NET_SERVER_H__ */