VLC 2.1.0

Jilles Tjoelker jilles at stack.nl
Tue Oct 22 21:23:29 UTC 2013


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 at 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


More information about the freebsd-multimedia mailing list