From d2a506eb676609baad6ad70c6a6848014d56231d Mon Sep 17 00:00:00 2001 From: Michal Privoznik Date: Tue, 4 May 2021 11:24:07 +0200 Subject: [PATCH] virthread: Make sure virOnce() returns -1 on error MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit Since its introduction in v0.9.1~65 the virOnce() was expected to follow the usual retval logic (0 for success, a negative number for failure). However, that was never the case. On the other hand, looking into glibc and musl the pthread_once() never returns anything other than zero (uclibc-ng seems to not implement pthread_once()), therefore we never really hit any problem. But for code cleanliness (and to match POSIX documentation), let's change to code so that our retval logic is honoured. Signed-off-by: Michal Privoznik Reviewed-by: Ján Tomko --- src/util/virthread.c | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/src/util/virthread.c b/src/util/virthread.c index 5ddbf7c49a..e89c1a09fb 100644 --- a/src/util/virthread.c +++ b/src/util/virthread.c @@ -39,7 +39,15 @@ int virOnce(virOnceControl *once, virOnceFunc init) { - return pthread_once(&once->once, init); + int ret; + + ret = pthread_once(&once->once, init); + if (ret != 0) { + errno = ret; + return -1; + } + + return 0; } -- 2.47.2