libvlcpp | branch: master | Hugo Beauzée-Luyssen <[email protected]> | Wed May 20 
11:02:41 2015 +0200| [48e272a7ccaff7f40115e07684bbedb17d95f013] | committer: 
Hugo Beauzée-Luyssen

MediaPlayer: outputDeviceEnum: Ensure we always release the device list

vector::emplace_back might throw and prevent
libvlc_audio_output_device_list_release from being called

> http://git.videolan.org/gitweb.cgi/libvlcpp.git/?a=commit;h=48e272a7ccaff7f40115e07684bbedb17d95f013
---

 vlcpp/MediaPlayer.hpp |    9 +++++----
 1 file changed, 5 insertions(+), 4 deletions(-)

diff --git a/vlcpp/MediaPlayer.hpp b/vlcpp/MediaPlayer.hpp
index ff7f119..2db4ab7 100644
--- a/vlcpp/MediaPlayer.hpp
+++ b/vlcpp/MediaPlayer.hpp
@@ -820,13 +820,14 @@ public:
      */
     std::vector<AudioOutputDeviceDescription> outputDeviceEnum()
     {
-        libvlc_audio_output_device_t* devices = 
libvlc_audio_output_device_enum(*this);
+        auto devices = libvlc_audio_output_device_enum(*this);
+        if ( devices == nullptr )
+            return {};
         std::vector<AudioOutputDeviceDescription> res;
-        if ( devices == NULL )
-            return res;
+        std::unique_ptr<libvlc_audio_output_device_t, 
decltype(&libvlc_audio_output_device_list_release)>
+                devicesPtr( devices, libvlc_audio_output_device_list_release);
         for ( auto* p = devices; p != NULL; p = p->p_next )
             res.emplace_back( p );
-        libvlc_audio_output_device_list_release( devices );
         return res;
     }
 

_______________________________________________
vlc-commits mailing list
[email protected]
https://mailman.videolan.org/listinfo/vlc-commits

Reply via email to