On Wed, 22 Mar 2017 20:34:10 -0300
James Almer <jamr...@gmail.com> wrote:

> Signed-off-by: James Almer <jamr...@gmail.com>
> ---
>  libavfilter/avfilter.c | 6 ++++--
>  1 file changed, 4 insertions(+), 2 deletions(-)
> 
> diff --git a/libavfilter/avfilter.c b/libavfilter/avfilter.c
> index b431990edc..049c5ff47c 100644
> --- a/libavfilter/avfilter.c
> +++ b/libavfilter/avfilter.c
> @@ -19,7 +19,8 @@
>   * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 
> USA
>   */
>  
> -#include "libavutil/atomic.h"
> +#include <stdatomic.h>
> +
>  #include "libavutil/avassert.h"
>  #include "libavutil/avstring.h"
>  #include "libavutil/buffer.h"
> @@ -580,13 +581,14 @@ AVFilter *avfilter_get_by_name(const char *name)
>  int avfilter_register(AVFilter *filter)
>  {
>      AVFilter **f = last_filter;
> +    const AVFilter *cmp = NULL;
>  
>      /* the filter must select generic or internal exclusively */
>      av_assert0((filter->flags & AVFILTER_FLAG_SUPPORT_TIMELINE) != 
> AVFILTER_FLAG_SUPPORT_TIMELINE);
>  
>      filter->next = NULL;
>  
> -    while(*f || avpriv_atomic_ptr_cas((void * volatile *)f, NULL, filter))
> +    while(*f || !atomic_compare_exchange_strong(f, &cmp, filter))
>          f = &(*f)->next;
>      last_filter = &filter->next;
>  

Patches 2-5 are OK, but work only with real atomics. (All this
"lock free" code is another case of having to deal with barely justified
messes that were committed before, instead of having implemented a
cleaner solution, but whatever.)
_______________________________________________
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
http://ffmpeg.org/mailman/listinfo/ffmpeg-devel

Reply via email to