diff --git a/libavfilter/avfilter.c b/libavfilter/avfilter.c index 9e3977cca0..c3228cd855 100644 --- a/libavfilter/avfilter.c +++ b/libavfilter/avfilter.c @@ -19,6 +19,7 @@ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ +#include "libavutil/atomic.h" #include "libavutil/avassert.h" #include "libavutil/avstring.h" #include "libavutil/channel_layout.h" @@ -465,11 +466,11 @@ int avfilter_register(AVFilter *filter) || (!input->start_frame && !input->end_frame)); } - while (*f) - f = &(*f)->next; - *f = filter; filter->next = NULL; + while(avpriv_atomic_ptr_cas((void * volatile *)f, NULL, filter)) + f = &(*f)->next; + return 0; }