Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 22 Oct 2013 23:23:27 +0200
From:      Jilles Tjoelker <jilles@stack.nl>
To:        Tijl Coosemans <tijl@FreeBSD.org>
Cc:        multimedia-list freebsd <freebsd-multimedia@freebsd.org>, William Grzybowski <william88@gmail.com>, freebsd-standards@FreeBSD.org
Subject:   Re: VLC 2.1.0
Message-ID:  <20131022212327.GB20055@stack.nl>
In-Reply-To: <20131022174715.59433270@kalimero.tijl.coosemans.org>
References:  <CAHtVNLONK3hZTUoJoebjtdZbhwK8pA8deO1um191zF5pZowF9A@mail.gmail.com> <20131022152502.61214646@kalimero.tijl.coosemans.org> <CAHtVNLOp%2BXqj%2BEbVsxDsLj4tjsxJkjWLm9G0ze_ND_noYGu_=Q@mail.gmail.com> <20131022174715.59433270@kalimero.tijl.coosemans.org>

next in thread | previous in thread | raw e-mail | index | archive | help
On Tue, Oct 22, 2013 at 05:47:15PM +0200, Tijl Coosemans wrote:
> On Tue, 22 Oct 2013 12:30:38 -0200 William Grzybowski wrote:
> > On Tue, Oct 22, 2013 at 11:25 AM, Tijl Coosemans <tijl@coosemans.org> wrote:
> >> On Tue, 22 Oct 2013 10:55:28 -0200 William Grzybowski wrote:
> >>> I am trying to update vlc to 2.1.0, its the final step to get rid of
> >>> ffmpeg1 as well.
> >>> I was wondering if any c++ guru out there have any clues on how to fix this:

> >>> http://pastebin.ca/2469885

> >>> http://people.freebsd.org/~wg/vlc2.1.0.txt

> >> I think the problem is that clang doesn't expect } after a label.
> >> So try adding a ; or (void)0; between the label and vlc_cleanup_run().

> > That works, thank you!

> I suspect that clang is correct to complain about this and if so we
> might want to add (void)0; to the definition of pthread_cleanup_pop
> in /usr/include/pthread.h.  Let's see what -standards has to say
> about this.

> Summarised: the idiom that VLC uses is this:

> pthread_cleanup_push(...);
> ...
> if (error) goto cleanup;
> ...
> cleanup:
> pthread_cleanup_pop(...);

> Because the definition of the pthread_cleanup_pop macro starts with }
> clang complains.

glibc has  do { } while (0);  at the start of the pthread_cleanup_pop
define. I think this is a better option than  ;  or  (void)0;  as it
minimizes the wrong things it can combine with.

Reading POSIX, it seems valid to put a label right before an invocation
of pthread_cleanup_pop. In such a case, the invocation still appears as
a statement and can be paired with a pthread_cleanup_push in the same
lexical scope.

Therefore the following patch to src seems appropriate.

Index: include/pthread.h
===================================================================
--- include/pthread.h	(revision 256728)
+++ include/pthread.h	(working copy)
@@ -175,6 +175,7 @@
 			{
 
 #define		pthread_cleanup_pop(execute)					\
+				do { } while (0);				\
 			}							\
 			__pthread_cleanup_pop_imp(execute);			\
 		}

-- 
Jilles Tjoelker



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20131022212327.GB20055>