OSDN Git Service

lavd/avdevice: always free detected devices on error
authorLukasz Marek <lukasz.m.luki@gmail.com>
Tue, 4 Mar 2014 01:57:27 +0000 (02:57 +0100)
committerLukasz Marek <lukasz.m.luki@gmail.com>
Wed, 5 Mar 2014 23:34:50 +0000 (00:34 +0100)
Signed-off-by: Lukasz Marek <lukasz.m.luki@gmail.com>
libavdevice/avdevice.c

index 8964b96..ea14c7a 100644 (file)
@@ -101,6 +101,7 @@ int avdevice_dev_to_app_control_message(struct AVFormatContext *s, enum AVDevToA
 
 int avdevice_list_devices(AVFormatContext *s, AVDeviceInfoList **device_list)
 {
+    int ret;
     av_assert0(s);
     av_assert0(device_list);
     av_assert0(s->oformat || s->iformat);
@@ -113,8 +114,12 @@ int avdevice_list_devices(AVFormatContext *s, AVDeviceInfoList **device_list)
     if (!(*device_list))
         return AVERROR(ENOMEM);
     if (s->oformat)
-        return s->oformat->get_device_list(s, *device_list);
-    return s->iformat->get_device_list(s, *device_list);
+        ret = s->oformat->get_device_list(s, *device_list);
+    else
+        ret = s->iformat->get_device_list(s, *device_list);
+    if (ret < 0)
+        avdevice_free_list_devices(device_list);
+    return ret;
 }
 
 void avdevice_free_list_devices(AVDeviceInfoList **device_list)