diff --git a/libavfilter/avfilter.c b/libavfilter/avfilter.c
index 4c61bf436e284b6787eb4c2b59eb89215b3834dd..9e1940be8fd6fa9e4dade8799cc878e21562fdc6 100644
--- a/libavfilter/avfilter.c
+++ b/libavfilter/avfilter.c
@@ -124,6 +124,7 @@ int avfilter_link(AVFilterContext *src, unsigned srcpad,
 int avfilter_insert_filter(AVFilterLink *link, AVFilterContext *filt,
                            unsigned in, unsigned out)
 {
+    int ret;
     unsigned dstpad_idx = link->dstpad - link->dst->input_pads;
 
     av_log(link->dst, AV_LOG_INFO, "auto-inserting filter '%s' "
@@ -131,10 +132,10 @@ int avfilter_insert_filter(AVFilterLink *link, AVFilterContext *filt,
            filt->name, link->src->name, link->dst->name);
 
     link->dst->inputs[dstpad_idx] = NULL;
-    if (avfilter_link(filt, out, link->dst, dstpad_idx)) {
+    if ((ret = avfilter_link(filt, out, link->dst, dstpad_idx)) < 0) {
         /* failed to link output filter to new filter */
         link->dst->inputs[dstpad_idx] = link;
-        return -1;
+        return ret;
     }
 
     /* re-hookup the link to the new destination filter we inserted */