提交 6aebc194 编写于 作者: D Daniel P. Berrange

Add virSocketRef API to facilitate dynamic probing

Instead of directly manipulating sock->refs, add a virSocketRef
API

* src/rpc/virnetsocket.c, src/rpc/virnetsocket.h: Add virSocketRef
上级 bc61aa12
......@@ -655,6 +655,14 @@ int virNetSocketNewConnectExternal(const char **cmdargv,
}
void virNetSocketRef(virNetSocketPtr sock)
{
virMutexLock(&sock->lock);
sock->refs++;
virMutexUnlock(&sock->lock);
}
void virNetSocketFree(virNetSocketPtr sock)
{
if (!sock)
......@@ -1187,20 +1195,19 @@ int virNetSocketAddIOCallback(virNetSocketPtr sock,
{
int ret = -1;
virNetSocketRef(sock);
virMutexLock(&sock->lock);
if (sock->watch > 0) {
VIR_DEBUG("Watch already registered on socket %p", sock);
goto cleanup;
}
sock->refs++;
if ((sock->watch = virEventAddHandle(sock->fd,
events,
virNetSocketEventHandle,
sock,
virNetSocketEventFree)) < 0) {
VIR_DEBUG("Failed to register watch on socket %p", sock);
sock->refs--;
goto cleanup;
}
sock->func = func;
......@@ -1211,6 +1218,8 @@ int virNetSocketAddIOCallback(virNetSocketPtr sock,
cleanup:
virMutexUnlock(&sock->lock);
if (ret != 0)
virNetSocketFree(sock);
return ret;
}
......
......@@ -101,6 +101,7 @@ void virNetSocketSetSASLSession(virNetSocketPtr sock,
virNetSASLSessionPtr sess);
# endif
bool virNetSocketHasCachedData(virNetSocketPtr sock);
void virNetSocketRef(virNetSocketPtr sock);
void virNetSocketFree(virNetSocketPtr sock);
const char *virNetSocketLocalAddrString(virNetSocketPtr sock);
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册