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>
virNetServerAddProgram;
virNetServerAddService;
virNetServerClose;
+virNetServerGetClients;
virNetServerGetName;
virNetServerHasClients;
virNetServerNew;
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;
+}
unsigned long long virNetServerNextClientID(virNetServerPtr srv);
+int virNetServerGetClients(virNetServerPtr srv,
+ virNetServerClientPtr **clients);
+
#endif /* __VIR_NET_SERVER_H__ */