virthread: Make sure virOnce() returns -1 on error

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 <mprivozn@redhat.com>
Reviewed-by: Ján Tomko <jtomko@redhat.com>
This commit is contained in:
Michal Privoznik 2021-05-04 11:24:07 +02:00
parent 1764b305e6
commit d2a506eb67

View File

@ -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;
}