virnetsocket: Use g_auto* more

There are few functions in virnetsocket.c where an object/memory
is freed by explicit call. Use g_autoptr()/g_autofree/VIR_AUTOCLOSE
to do that automatically.

Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
Reviewed-by: Ján Tomko <jtomko@redhat.com>
This commit is contained in:
Michal Privoznik 2021-10-15 13:41:12 +02:00
parent 44d8324f13
commit 0a9d5f87b9

View File

@ -124,10 +124,9 @@ VIR_ONCE_GLOBAL_INIT(virNetSocket);
#ifndef WIN32 #ifndef WIN32
static int virNetSocketForkDaemon(const char *binary) static int virNetSocketForkDaemon(const char *binary)
{ {
int ret; g_autoptr(virCommand) cmd = virCommandNewArgList(binary,
virCommand *cmd = virCommandNewArgList(binary, "--timeout=120",
"--timeout=120", NULL);
NULL);
virCommandAddEnvPassCommon(cmd); virCommandAddEnvPassCommon(cmd);
virCommandAddEnvPass(cmd, "XDG_CACHE_HOME"); virCommandAddEnvPass(cmd, "XDG_CACHE_HOME");
@ -135,9 +134,7 @@ static int virNetSocketForkDaemon(const char *binary)
virCommandAddEnvPass(cmd, "XDG_RUNTIME_DIR"); virCommandAddEnvPass(cmd, "XDG_RUNTIME_DIR");
virCommandClearCaps(cmd); virCommandClearCaps(cmd);
virCommandDaemonize(cmd); virCommandDaemonize(cmd);
ret = virCommandRun(cmd, NULL); return virCommandRun(cmd, NULL);
virCommandFree(cmd);
return ret;
} }
#endif #endif
@ -234,7 +231,7 @@ virNetSocketNew(virSocketAddr *localAddr,
pid_t pid, pid_t pid,
bool unlinkUNIX) bool unlinkUNIX)
{ {
virNetSocket *sock; g_autoptr(virNetSocket) sock = NULL;
int no_slow_start = 1; int no_slow_start = 1;
if (virNetSocketInitialize() < 0) if (virNetSocketInitialize() < 0)
@ -300,11 +297,10 @@ virNetSocketNew(virSocketAddr *localAddr,
sock, fd, errfd, (long long)pid, sock, fd, errfd, (long long)pid,
NULLSTR(sock->localAddrStrSASL), NULLSTR(sock->remoteAddrStrSASL)); NULLSTR(sock->localAddrStrSASL), NULLSTR(sock->remoteAddrStrSASL));
return sock; return g_steal_pointer(&sock);
error: error:
sock->fd = sock->errfd = -1; /* Caller owns fd/errfd on failure */ sock->fd = sock->errfd = -1; /* Caller owns fd/errfd on failure */
virObjectUnref(sock);
return NULL; return NULL;
} }
@ -667,13 +663,13 @@ int virNetSocketNewConnectUNIX(const char *path,
const char *spawnDaemonPath, const char *spawnDaemonPath,
virNetSocket **retsock) virNetSocket **retsock)
{ {
char *lockpath = NULL; g_autofree char *lockpath = NULL;
int lockfd = -1; VIR_AUTOCLOSE lockfd = -1;
int fd = -1; int fd = -1;
int retries = 500; int retries = 500;
virSocketAddr localAddr; virSocketAddr localAddr;
virSocketAddr remoteAddr; virSocketAddr remoteAddr;
char *rundir = NULL; g_autofree char *rundir = NULL;
int ret = -1; int ret = -1;
bool daemonLaunched = false; bool daemonLaunched = false;
@ -762,10 +758,7 @@ int virNetSocketNewConnectUNIX(const char *path,
cleanup: cleanup:
if (lockfd != -1) { if (lockfd != -1) {
unlink(lockpath); unlink(lockpath);
VIR_FORCE_CLOSE(lockfd);
} }
VIR_FREE(lockpath);
VIR_FREE(rundir);
if (ret < 0 && fd != -1) if (ret < 0 && fd != -1)
closesocket(fd); closesocket(fd);
@ -898,7 +891,7 @@ virNetSocketNewConnectLibSSH2(const char *host,
virURI *uri, virURI *uri,
virNetSocket **retsock) virNetSocket **retsock)
{ {
virNetSocket *sock = NULL; g_autoptr(virNetSocket) sock = NULL;
virNetSSHSession *sess = NULL; virNetSSHSession *sess = NULL;
unsigned int verify; unsigned int verify;
int ret = -1; int ret = -1;
@ -985,12 +978,11 @@ virNetSocketNewConnectLibSSH2(const char *host,
goto error; goto error;
sock->sshSession = sess; sock->sshSession = sess;
*retsock = sock; *retsock = g_steal_pointer(&sock);
return 0; return 0;
error: error:
virObjectUnref(sock);
virObjectUnref(sess); virObjectUnref(sess);
return ret; return ret;
} }
@ -1030,7 +1022,7 @@ virNetSocketNewConnectLibssh(const char *host,
virURI *uri, virURI *uri,
virNetSocket **retsock) virNetSocket **retsock)
{ {
virNetSocket *sock = NULL; g_autoptr(virNetSocket) sock = NULL;
virNetLibsshSession *sess = NULL; virNetLibsshSession *sess = NULL;
unsigned int verify; unsigned int verify;
int ret = -1; int ret = -1;
@ -1118,12 +1110,11 @@ virNetSocketNewConnectLibssh(const char *host,
* trying to close an invalid FD). * trying to close an invalid FD).
*/ */
sock->ownsFd = false; sock->ownsFd = false;
*retsock = sock; *retsock = g_steal_pointer(&sock);
return 0; return 0;
error: error:
virObjectUnref(sock);
virObjectUnref(sess); virObjectUnref(sess);
return ret; return ret;
} }
@ -1238,7 +1229,7 @@ virNetSocket *virNetSocketNewPostExecRestart(virJSONValue *object)
virJSONValue *virNetSocketPreExecRestart(virNetSocket *sock) virJSONValue *virNetSocketPreExecRestart(virNetSocket *sock)
{ {
virJSONValue *object = NULL; g_autoptr(virJSONValue) object = NULL;
virObjectLock(sock); virObjectLock(sock);
@ -1287,11 +1278,10 @@ virJSONValue *virNetSocketPreExecRestart(virNetSocket *sock)
} }
virObjectUnlock(sock); virObjectUnlock(sock);
return object; return g_steal_pointer(&object);
error: error:
virObjectUnlock(sock); virObjectUnlock(sock);
virJSONValueFree(object);
return NULL; return NULL;
} }
@ -1740,7 +1730,7 @@ bool virNetSocketHasPendingData(virNetSocket *sock G_GNUC_UNUSED)
static ssize_t virNetSocketReadWire(virNetSocket *sock, char *buf, size_t len) static ssize_t virNetSocketReadWire(virNetSocket *sock, char *buf, size_t len)
{ {
char *errout = NULL; g_autofree char *errout = NULL;
ssize_t ret; ssize_t ret;
#if WITH_SSH2 #if WITH_SSH2
@ -1804,7 +1794,6 @@ static ssize_t virNetSocketReadWire(virNetSocket *sock, char *buf, size_t len)
} }
} }
VIR_FREE(errout);
return ret; return ret;
} }
@ -1859,22 +1848,18 @@ static ssize_t virNetSocketReadSASL(virNetSocket *sock, char *buf, size_t len)
/* Need to read some more data off the wire */ /* Need to read some more data off the wire */
if (sock->saslDecoded == NULL) { if (sock->saslDecoded == NULL) {
ssize_t encodedLen = virNetSASLSessionGetMaxBufSize(sock->saslSession); ssize_t encodedLen = virNetSASLSessionGetMaxBufSize(sock->saslSession);
char *encoded; g_autofree char *encoded = g_new0(char, encodedLen);
encoded = g_new0(char, encodedLen);
encodedLen = virNetSocketReadWire(sock, encoded, encodedLen); encodedLen = virNetSocketReadWire(sock, encoded, encodedLen);
if (encodedLen <= 0) { if (encodedLen <= 0)
VIR_FREE(encoded);
return encodedLen; return encodedLen;
}
if (virNetSASLSessionDecode(sock->saslSession, if (virNetSASLSessionDecode(sock->saslSession,
encoded, encodedLen, encoded, encodedLen,
&sock->saslDecoded, &sock->saslDecodedLength) < 0) { &sock->saslDecoded, &sock->saslDecodedLength) < 0) {
VIR_FREE(encoded);
return -1; return -1;
} }
VIR_FREE(encoded);
sock->saslDecodedOffset = 0; sock->saslDecodedOffset = 0;
} }
@ -2136,7 +2121,7 @@ static void virNetSocketEventHandle(int watch G_GNUC_UNUSED,
static void virNetSocketEventFree(void *opaque) static void virNetSocketEventFree(void *opaque)
{ {
virNetSocket *sock = opaque; g_autoptr(virNetSocket) sock = opaque;
virFreeCallback ff; virFreeCallback ff;
void *eopaque; void *eopaque;
@ -2149,8 +2134,6 @@ static void virNetSocketEventFree(void *opaque)
if (ff) if (ff)
ff(eopaque); ff(eopaque);
virObjectUnref(sock);
} }
int virNetSocketAddIOCallback(virNetSocket *sock, int virNetSocketAddIOCallback(virNetSocket *sock,