mirror of
https://github.com/libvirt/libvirt.git
synced 2025-02-25 18:55:26 -06:00
Add public APIs for ref counting on public objects
This commit is contained in:
parent
0466ff28f2
commit
a776fad370
@ -1,3 +1,11 @@
|
|||||||
|
Tue Jan 20 12:08:53 GMT 2009 Daniel P. Berrange <berrange@redhat.com>
|
||||||
|
|
||||||
|
* include/libvirt/libvirt.h, include/libvirt/libvirt.h.in,
|
||||||
|
src/libvirt.c, src/libvirt_public.syms: Add new ref counting
|
||||||
|
APIs for public objects: virConnectRef, virDomainRef,
|
||||||
|
virNetworkRef, virStoragePoolRef, virStorageVolRef,
|
||||||
|
virNodeDeviceRef
|
||||||
|
|
||||||
Tue Jan 20 12:03:53 GMT 2009 Daniel P. Berrange <berrange@redhat.com>
|
Tue Jan 20 12:03:53 GMT 2009 Daniel P. Berrange <berrange@redhat.com>
|
||||||
|
|
||||||
* tests/cpuset, tests/read-bufsiz, tests/start, tests/undefine,
|
* tests/cpuset, tests/read-bufsiz, tests/start, tests/undefine,
|
||||||
|
@ -396,6 +396,7 @@ virConnectPtr virConnectOpenReadOnly (const char *name);
|
|||||||
virConnectPtr virConnectOpenAuth (const char *name,
|
virConnectPtr virConnectOpenAuth (const char *name,
|
||||||
virConnectAuthPtr auth,
|
virConnectAuthPtr auth,
|
||||||
int flags);
|
int flags);
|
||||||
|
int virConnectRef (virConnectPtr conn);
|
||||||
int virConnectClose (virConnectPtr conn);
|
int virConnectClose (virConnectPtr conn);
|
||||||
const char * virConnectGetType (virConnectPtr conn);
|
const char * virConnectGetType (virConnectPtr conn);
|
||||||
int virConnectGetVersion (virConnectPtr conn,
|
int virConnectGetVersion (virConnectPtr conn,
|
||||||
@ -453,6 +454,7 @@ int virDomainShutdown (virDomainPtr domain);
|
|||||||
int virDomainReboot (virDomainPtr domain,
|
int virDomainReboot (virDomainPtr domain,
|
||||||
unsigned int flags);
|
unsigned int flags);
|
||||||
int virDomainDestroy (virDomainPtr domain);
|
int virDomainDestroy (virDomainPtr domain);
|
||||||
|
int virDomainRef (virDomainPtr domain);
|
||||||
int virDomainFree (virDomainPtr domain);
|
int virDomainFree (virDomainPtr domain);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -765,6 +767,7 @@ int virNetworkCreate (virNetworkPtr network);
|
|||||||
* Network destroy/free
|
* Network destroy/free
|
||||||
*/
|
*/
|
||||||
int virNetworkDestroy (virNetworkPtr network);
|
int virNetworkDestroy (virNetworkPtr network);
|
||||||
|
int virNetworkRef (virNetworkPtr network);
|
||||||
int virNetworkFree (virNetworkPtr network);
|
int virNetworkFree (virNetworkPtr network);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -925,6 +928,7 @@ int virStoragePoolCreate (virStoragePoolPtr pool,
|
|||||||
int virStoragePoolDestroy (virStoragePoolPtr pool);
|
int virStoragePoolDestroy (virStoragePoolPtr pool);
|
||||||
int virStoragePoolDelete (virStoragePoolPtr pool,
|
int virStoragePoolDelete (virStoragePoolPtr pool,
|
||||||
unsigned int flags);
|
unsigned int flags);
|
||||||
|
int virStoragePoolRef (virStoragePoolPtr pool);
|
||||||
int virStoragePoolFree (virStoragePoolPtr pool);
|
int virStoragePoolFree (virStoragePoolPtr pool);
|
||||||
int virStoragePoolRefresh (virStoragePoolPtr pool,
|
int virStoragePoolRefresh (virStoragePoolPtr pool,
|
||||||
unsigned int flags);
|
unsigned int flags);
|
||||||
@ -978,6 +982,7 @@ virStorageVolPtr virStorageVolCreateXML (virStoragePoolPtr pool,
|
|||||||
unsigned int flags);
|
unsigned int flags);
|
||||||
int virStorageVolDelete (virStorageVolPtr vol,
|
int virStorageVolDelete (virStorageVolPtr vol,
|
||||||
unsigned int flags);
|
unsigned int flags);
|
||||||
|
int virStorageVolRef (virStorageVolPtr vol);
|
||||||
int virStorageVolFree (virStorageVolPtr vol);
|
int virStorageVolFree (virStorageVolPtr vol);
|
||||||
|
|
||||||
int virStorageVolGetInfo (virStorageVolPtr vol,
|
int virStorageVolGetInfo (virStorageVolPtr vol,
|
||||||
@ -1045,6 +1050,7 @@ int virNodeDeviceListCaps (virNodeDevicePtr dev,
|
|||||||
char * virNodeDeviceGetXMLDesc (virNodeDevicePtr dev,
|
char * virNodeDeviceGetXMLDesc (virNodeDevicePtr dev,
|
||||||
unsigned int flags);
|
unsigned int flags);
|
||||||
|
|
||||||
|
int virNodeDeviceRef (virNodeDevicePtr dev);
|
||||||
int virNodeDeviceFree (virNodeDevicePtr dev);
|
int virNodeDeviceFree (virNodeDevicePtr dev);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -396,6 +396,7 @@ virConnectPtr virConnectOpenReadOnly (const char *name);
|
|||||||
virConnectPtr virConnectOpenAuth (const char *name,
|
virConnectPtr virConnectOpenAuth (const char *name,
|
||||||
virConnectAuthPtr auth,
|
virConnectAuthPtr auth,
|
||||||
int flags);
|
int flags);
|
||||||
|
int virConnectRef (virConnectPtr conn);
|
||||||
int virConnectClose (virConnectPtr conn);
|
int virConnectClose (virConnectPtr conn);
|
||||||
const char * virConnectGetType (virConnectPtr conn);
|
const char * virConnectGetType (virConnectPtr conn);
|
||||||
int virConnectGetVersion (virConnectPtr conn,
|
int virConnectGetVersion (virConnectPtr conn,
|
||||||
@ -453,6 +454,7 @@ int virDomainShutdown (virDomainPtr domain);
|
|||||||
int virDomainReboot (virDomainPtr domain,
|
int virDomainReboot (virDomainPtr domain,
|
||||||
unsigned int flags);
|
unsigned int flags);
|
||||||
int virDomainDestroy (virDomainPtr domain);
|
int virDomainDestroy (virDomainPtr domain);
|
||||||
|
int virDomainRef (virDomainPtr domain);
|
||||||
int virDomainFree (virDomainPtr domain);
|
int virDomainFree (virDomainPtr domain);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -765,6 +767,7 @@ int virNetworkCreate (virNetworkPtr network);
|
|||||||
* Network destroy/free
|
* Network destroy/free
|
||||||
*/
|
*/
|
||||||
int virNetworkDestroy (virNetworkPtr network);
|
int virNetworkDestroy (virNetworkPtr network);
|
||||||
|
int virNetworkRef (virNetworkPtr network);
|
||||||
int virNetworkFree (virNetworkPtr network);
|
int virNetworkFree (virNetworkPtr network);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -925,6 +928,7 @@ int virStoragePoolCreate (virStoragePoolPtr pool,
|
|||||||
int virStoragePoolDestroy (virStoragePoolPtr pool);
|
int virStoragePoolDestroy (virStoragePoolPtr pool);
|
||||||
int virStoragePoolDelete (virStoragePoolPtr pool,
|
int virStoragePoolDelete (virStoragePoolPtr pool,
|
||||||
unsigned int flags);
|
unsigned int flags);
|
||||||
|
int virStoragePoolRef (virStoragePoolPtr pool);
|
||||||
int virStoragePoolFree (virStoragePoolPtr pool);
|
int virStoragePoolFree (virStoragePoolPtr pool);
|
||||||
int virStoragePoolRefresh (virStoragePoolPtr pool,
|
int virStoragePoolRefresh (virStoragePoolPtr pool,
|
||||||
unsigned int flags);
|
unsigned int flags);
|
||||||
@ -978,6 +982,7 @@ virStorageVolPtr virStorageVolCreateXML (virStoragePoolPtr pool,
|
|||||||
unsigned int flags);
|
unsigned int flags);
|
||||||
int virStorageVolDelete (virStorageVolPtr vol,
|
int virStorageVolDelete (virStorageVolPtr vol,
|
||||||
unsigned int flags);
|
unsigned int flags);
|
||||||
|
int virStorageVolRef (virStorageVolPtr vol);
|
||||||
int virStorageVolFree (virStorageVolPtr vol);
|
int virStorageVolFree (virStorageVolPtr vol);
|
||||||
|
|
||||||
int virStorageVolGetInfo (virStorageVolPtr vol,
|
int virStorageVolGetInfo (virStorageVolPtr vol,
|
||||||
@ -1045,6 +1050,7 @@ int virNodeDeviceListCaps (virNodeDevicePtr dev,
|
|||||||
char * virNodeDeviceGetXMLDesc (virNodeDevicePtr dev,
|
char * virNodeDeviceGetXMLDesc (virNodeDevicePtr dev,
|
||||||
unsigned int flags);
|
unsigned int flags);
|
||||||
|
|
||||||
|
int virNodeDeviceRef (virNodeDevicePtr dev);
|
||||||
int virNodeDeviceFree (virNodeDevicePtr dev);
|
int virNodeDeviceFree (virNodeDevicePtr dev);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
183
src/libvirt.c
183
src/libvirt.c
@ -1119,6 +1119,35 @@ virConnectClose(virConnectPtr conn)
|
|||||||
return (0);
|
return (0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* virConnectRef:
|
||||||
|
* @conn: the connection to hold a reference on
|
||||||
|
*
|
||||||
|
* Increment the reference count on the connection. For each
|
||||||
|
* additional call to this method, there shall be a corresponding
|
||||||
|
* call to virConnectClose to release the reference count, once
|
||||||
|
* the caller no longer needs the reference to this object.
|
||||||
|
*
|
||||||
|
* This method is typically useful for applications where multiple
|
||||||
|
* threads are using a connection, and it is required that the
|
||||||
|
* connection remain open until all threads have finished using
|
||||||
|
* it. ie, each new thread using a connection would increment
|
||||||
|
* the reference count.
|
||||||
|
*/
|
||||||
|
int
|
||||||
|
virConnectRef(virConnectPtr conn)
|
||||||
|
{
|
||||||
|
if ((!VIR_IS_CONNECT(conn))) {
|
||||||
|
virLibConnError(NULL, VIR_ERR_INVALID_ARG, __FUNCTION__);
|
||||||
|
return(-1);
|
||||||
|
}
|
||||||
|
virMutexLock(&conn->lock);
|
||||||
|
DEBUG("conn=%p refs=%d", conn, conn->refs);
|
||||||
|
conn->refs++;
|
||||||
|
virMutexUnlock(&conn->lock);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Not for public use. This function is part of the internal
|
* Not for public use. This function is part of the internal
|
||||||
* implementation of driver features in the remote case.
|
* implementation of driver features in the remote case.
|
||||||
@ -1776,6 +1805,36 @@ virDomainFree(virDomainPtr domain)
|
|||||||
return(0);
|
return(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* virDomainRef:
|
||||||
|
* @conn: the domain to hold a reference on
|
||||||
|
*
|
||||||
|
* Increment the reference count on the domain. For each
|
||||||
|
* additional call to this method, there shall be a corresponding
|
||||||
|
* call to virDomainFree to release the reference count, once
|
||||||
|
* the caller no longer needs the reference to this object.
|
||||||
|
*
|
||||||
|
* This method is typically useful for applications where multiple
|
||||||
|
* threads are using a connection, and it is required that the
|
||||||
|
* connection remain open until all threads have finished using
|
||||||
|
* it. ie, each new thread using a domain would increment
|
||||||
|
* the reference count.
|
||||||
|
*/
|
||||||
|
int
|
||||||
|
virDomainRef(virDomainPtr domain)
|
||||||
|
{
|
||||||
|
if ((!VIR_IS_CONNECTED_DOMAIN(domain))) {
|
||||||
|
virLibConnError(NULL, VIR_ERR_INVALID_ARG, __FUNCTION__);
|
||||||
|
return(-1);
|
||||||
|
}
|
||||||
|
virMutexLock(&domain->conn->lock);
|
||||||
|
DEBUG("domain=%p refs=%d", domain, domain->refs);
|
||||||
|
domain->refs++;
|
||||||
|
virMutexUnlock(&domain->conn->lock);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* virDomainSuspend:
|
* virDomainSuspend:
|
||||||
* @domain: a domain object
|
* @domain: a domain object
|
||||||
@ -4813,6 +4872,35 @@ virNetworkFree(virNetworkPtr network)
|
|||||||
return(0);
|
return(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* virNetworkRef:
|
||||||
|
* @conn: the network to hold a reference on
|
||||||
|
*
|
||||||
|
* Increment the reference count on the network. For each
|
||||||
|
* additional call to this method, there shall be a corresponding
|
||||||
|
* call to virNetworkFree to release the reference count, once
|
||||||
|
* the caller no longer needs the reference to this object.
|
||||||
|
*
|
||||||
|
* This method is typically useful for applications where multiple
|
||||||
|
* threads are using a connection, and it is required that the
|
||||||
|
* connection remain open until all threads have finished using
|
||||||
|
* it. ie, each new thread using a network would increment
|
||||||
|
* the reference count.
|
||||||
|
*/
|
||||||
|
int
|
||||||
|
virNetworkRef(virNetworkPtr network)
|
||||||
|
{
|
||||||
|
if ((!VIR_IS_CONNECTED_NETWORK(network))) {
|
||||||
|
virLibConnError(NULL, VIR_ERR_INVALID_ARG, __FUNCTION__);
|
||||||
|
return(-1);
|
||||||
|
}
|
||||||
|
virMutexLock(&network->conn->lock);
|
||||||
|
DEBUG("network=%p refs=%d", network, network->refs);
|
||||||
|
network->refs++;
|
||||||
|
virMutexUnlock(&network->conn->lock);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* virNetworkGetName:
|
* virNetworkGetName:
|
||||||
* @network: a network object
|
* @network: a network object
|
||||||
@ -5868,6 +5956,35 @@ virStoragePoolFree(virStoragePoolPtr pool)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* virStoragePoolRef:
|
||||||
|
* @conn: the pool to hold a reference on
|
||||||
|
*
|
||||||
|
* Increment the reference count on the pool. For each
|
||||||
|
* additional call to this method, there shall be a corresponding
|
||||||
|
* call to virStoragePoolFree to release the reference count, once
|
||||||
|
* the caller no longer needs the reference to this object.
|
||||||
|
*
|
||||||
|
* This method is typically useful for applications where multiple
|
||||||
|
* threads are using a connection, and it is required that the
|
||||||
|
* connection remain open until all threads have finished using
|
||||||
|
* it. ie, each new thread using a pool would increment
|
||||||
|
* the reference count.
|
||||||
|
*/
|
||||||
|
int
|
||||||
|
virStoragePoolRef(virStoragePoolPtr pool)
|
||||||
|
{
|
||||||
|
if ((!VIR_IS_CONNECTED_STORAGE_POOL(pool))) {
|
||||||
|
virLibConnError(NULL, VIR_ERR_INVALID_ARG, __FUNCTION__);
|
||||||
|
return(-1);
|
||||||
|
}
|
||||||
|
virMutexLock(&pool->conn->lock);
|
||||||
|
DEBUG("pool=%p refs=%d", pool, pool->refs);
|
||||||
|
pool->refs++;
|
||||||
|
virMutexUnlock(&pool->conn->lock);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* virStoragePoolRefresh:
|
* virStoragePoolRefresh:
|
||||||
* @pool: pointer to storage pool
|
* @pool: pointer to storage pool
|
||||||
@ -6620,6 +6737,35 @@ virStorageVolFree(virStorageVolPtr vol)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* virStorageVolRef:
|
||||||
|
* @conn: the vol to hold a reference on
|
||||||
|
*
|
||||||
|
* Increment the reference count on the vol. For each
|
||||||
|
* additional call to this method, there shall be a corresponding
|
||||||
|
* call to virStorageVolFree to release the reference count, once
|
||||||
|
* the caller no longer needs the reference to this object.
|
||||||
|
*
|
||||||
|
* This method is typically useful for applications where multiple
|
||||||
|
* threads are using a connection, and it is required that the
|
||||||
|
* connection remain open until all threads have finished using
|
||||||
|
* it. ie, each new thread using a vol would increment
|
||||||
|
* the reference count.
|
||||||
|
*/
|
||||||
|
int
|
||||||
|
virStorageVolRef(virStorageVolPtr vol)
|
||||||
|
{
|
||||||
|
if ((!VIR_IS_CONNECTED_STORAGE_VOL(vol))) {
|
||||||
|
virLibConnError(NULL, VIR_ERR_INVALID_ARG, __FUNCTION__);
|
||||||
|
return(-1);
|
||||||
|
}
|
||||||
|
virMutexLock(&vol->conn->lock);
|
||||||
|
DEBUG("vol=%p refs=%d", vol, vol->refs);
|
||||||
|
vol->refs++;
|
||||||
|
virMutexUnlock(&vol->conn->lock);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* virStorageVolGetInfo:
|
* virStorageVolGetInfo:
|
||||||
* @vol: pointer to storage volume
|
* @vol: pointer to storage volume
|
||||||
@ -7093,6 +7239,36 @@ int virNodeDeviceFree(virNodeDevicePtr dev)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* virNodeDeviceRef:
|
||||||
|
* @conn: the dev to hold a reference on
|
||||||
|
*
|
||||||
|
* Increment the reference count on the dev. For each
|
||||||
|
* additional call to this method, there shall be a corresponding
|
||||||
|
* call to virNodeDeviceFree to release the reference count, once
|
||||||
|
* the caller no longer needs the reference to this object.
|
||||||
|
*
|
||||||
|
* This method is typically useful for applications where multiple
|
||||||
|
* threads are using a connection, and it is required that the
|
||||||
|
* connection remain open until all threads have finished using
|
||||||
|
* it. ie, each new thread using a dev would increment
|
||||||
|
* the reference count.
|
||||||
|
*/
|
||||||
|
int
|
||||||
|
virNodeDeviceRef(virNodeDevicePtr dev)
|
||||||
|
{
|
||||||
|
if ((!VIR_IS_CONNECTED_NODE_DEVICE(dev))) {
|
||||||
|
virLibConnError(NULL, VIR_ERR_INVALID_ARG, __FUNCTION__);
|
||||||
|
return(-1);
|
||||||
|
}
|
||||||
|
virMutexLock(&dev->conn->lock);
|
||||||
|
DEBUG("dev=%p refs=%d", dev, dev->refs);
|
||||||
|
dev->refs++;
|
||||||
|
virMutexUnlock(&dev->conn->lock);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Domain Event Notification
|
* Domain Event Notification
|
||||||
*/
|
*/
|
||||||
@ -7107,6 +7283,13 @@ int virNodeDeviceFree(virNodeDevicePtr dev)
|
|||||||
* Adds a Domain Event Callback.
|
* Adds a Domain Event Callback.
|
||||||
* Registering for a domain callback will enable delivery of the events
|
* Registering for a domain callback will enable delivery of the events
|
||||||
*
|
*
|
||||||
|
* The virDomainPtr object handle passed into the callback upon delivery
|
||||||
|
* of an event is only valid for the duration of execution of the callback.
|
||||||
|
* If the callback wishes to keep the domain object after the callback
|
||||||
|
* returns, it shall take a reference to it, by calling virDomainRef.
|
||||||
|
* The reference can be released once the object is no longer required
|
||||||
|
* by calling virDomainFree.
|
||||||
|
*
|
||||||
* Returns 0 on success, -1 on failure
|
* Returns 0 on success, -1 on failure
|
||||||
*/
|
*/
|
||||||
int
|
int
|
||||||
|
@ -236,5 +236,15 @@ LIBVIRT_0.5.0 {
|
|||||||
|
|
||||||
} LIBVIRT_0.4.5;
|
} LIBVIRT_0.4.5;
|
||||||
|
|
||||||
# no new entry point in 0.5.1
|
LIBVIRT_0.6.0 {
|
||||||
|
global:
|
||||||
|
virConnectRef;
|
||||||
|
virDomainRef;
|
||||||
|
virNetworkRef;
|
||||||
|
virStoragePoolRef;
|
||||||
|
virStorageVolRef;
|
||||||
|
virNodeDeviceRef;
|
||||||
|
|
||||||
|
} LIBVIRT_0.5.0;
|
||||||
|
|
||||||
# .... define new API here using predicted next version number ....
|
# .... define new API here using predicted next version number ....
|
||||||
|
Loading…
Reference in New Issue
Block a user