VIR_DEBUG("st=%p data=%p nbytes=%zu", st, data, nbytes);
struct private_data *priv = st->conn->privateData;
virNetClientStreamPtr privst = st->privateData;
- int rv = -1;
-
- remoteDriverLock(priv);
+ int rv;
if (virNetClientStreamRaiseError(privst))
- goto cleanup;
+ return -1;
+
+ remoteDriverLock(priv);
+ priv->localUses++;
+ remoteDriverUnlock(priv);
rv = virNetClientStreamSendPacket(privst,
priv->client,
data,
nbytes);
-cleanup:
+ remoteDriverLock(priv);
+ priv->localUses--;
remoteDriverUnlock(priv);
-
return rv;
}
VIR_DEBUG("st=%p data=%p nbytes=%zu", st, data, nbytes);
struct private_data *priv = st->conn->privateData;
virNetClientStreamPtr privst = st->privateData;
- int rv = -1;
-
- remoteDriverLock(priv);
+ int rv;
if (virNetClientStreamRaiseError(privst))
- goto cleanup;
+ return -1;
+
+ remoteDriverLock(priv);
+ priv->localUses++;
+ remoteDriverUnlock(priv);
rv = virNetClientStreamRecvPacket(privst,
priv->client,
VIR_DEBUG("Done %d", rv);
-cleanup:
+ remoteDriverLock(priv);
+ priv->localUses--;
remoteDriverUnlock(priv);
-
return rv;
}
if (virNetClientStreamRaiseError(privst))
goto cleanup;
+ priv->localUses++;
+ remoteDriverUnlock(priv);
+
ret = virNetClientStreamSendPacket(privst,
priv->client,
VIR_NET_OK,
NULL,
0);
+ remoteDriverLock(priv);
+ priv->localUses--;
+
cleanup:
virNetClientRemoveStream(priv->client, privst);
virNetClientStreamFree(privst);
if (virNetClientStreamRaiseError(privst))
goto cleanup;
+ priv->localUses++;
+ remoteDriverUnlock(priv);
+
ret = virNetClientStreamSendPacket(privst,
priv->client,
VIR_NET_ERROR,
NULL,
0);
+ remoteDriverLock(priv);
+ priv->localUses--;
+
cleanup:
virNetClientRemoveStream(priv->client, privst);
virNetClientStreamFree(privst);