]> git.sesse.net Git - casparcg/commitdiff
Don't use raw pointers.
authorronag <ronag@362d55ac-95cf-4e76-9f9a-cbaa9c17b72d>
Tue, 13 Dec 2011 11:28:53 +0000 (11:28 +0000)
committerronag <ronag@362d55ac-95cf-4e76-9f9a-cbaa9c17b72d>
Tue, 13 Dec 2011 11:28:53 +0000 (11:28 +0000)
git-svn-id: https://casparcg.svn.sourceforge.net/svnroot/casparcg/server/trunk@1888 362d55ac-95cf-4e76-9f9a-cbaa9c17b72d

core/producer/frame_producer.cpp

index 308c10d17abff9d45c29258c78b0a3078328a166..aaa9c24947fbcfdeab2a5b2b7986fc9c9e972f8e 100644 (file)
@@ -40,7 +40,7 @@ std::vector<const producer_factory_t> g_factories;
        \r
 class destroy_producer_proxy : public frame_producer\r
 {      \r
-       std::shared_ptr<frame_producer>* producer_;\r
+       std::unique_ptr<std::shared_ptr<frame_producer>> producer_;\r
 public:\r
        destroy_producer_proxy(safe_ptr<frame_producer>&& producer) \r
                : producer_(new std::shared_ptr<frame_producer>(std::move(producer)))\r
@@ -64,20 +64,24 @@ public:
                                CASPAR_LOG(trace) << "Created destroyer: " << destroyer_count;\r
                        }\r
                                \r
-                       auto producer = producer_;\r
+                       auto producer = producer_.release();\r
                        auto pool         = destroyers;\r
                        destroyer->begin_invoke([=]\r
                        {\r
+                               std::unique_ptr<std::shared_ptr<frame_producer>> producer2(producer);\r
+\r
+                               auto str = (*producer2)->print();\r
                                try\r
                                {\r
                                        if(!producer->unique())\r
-                                               CASPAR_LOG(trace) << (*producer)->print() << L" Not destroyed on safe asynchronous destruction thread: " << producer->use_count();\r
+                                               CASPAR_LOG(trace) << str << L" Not destroyed on safe asynchronous destruction thread: " << producer->use_count();\r
                                        else\r
-                                               CASPAR_LOG(trace) << (*producer)->print() << L" Destroying on safe asynchronous destruction thread.";\r
+                                               CASPAR_LOG(trace) << str << L" Destroying on safe asynchronous destruction thread.";\r
                                }\r
                                catch(...){}\r
-\r
-                               delete producer;\r
+                                                               \r
+                               producer2.reset();\r
+                               CASPAR_LOG(debug) << str << L" Destroyed.";\r
                                pool->push(destroyer);\r
                        }); \r
                }\r
@@ -86,7 +90,9 @@ public:
                        CASPAR_LOG_CURRENT_EXCEPTION();\r
                        try\r
                        {\r
-                               delete producer_;\r
+                               auto str = (*producer_)->print();\r
+                               producer_.reset();\r
+                               CASPAR_LOG(debug) << str << L" Destroyed.";\r
                        }\r
                        catch(...){}\r
                }\r