[{"id":2688,"web_url":"https://patchwork.libcamera.org/comment/2688/","msgid":"<fcd73eb2-0a8a-5b28-a574-058e3f6ae998@ideasonboard.com>","date":"2019-09-23T13:24:17","subject":"Re: [libcamera-devel] [PATCH] qcam: Fix ViewFinder memory leak","submitter":{"id":4,"url":"https://patchwork.libcamera.org/api/people/4/","name":"Kieran Bingham","email":"kieran.bingham@ideasonboard.com"},"content":"On 23/09/2019 14:22, Kieran Bingham wrote:\n> When setting the format on the ViewFinder, a new image_ is allocated.\n> Any change in format deletes the existing allocation, but it is not\n> cleaned up on shutdown:\n> \n> Direct leak of 32 byte(s) in 1 object(s) allocated from:\n>     #0 0x7f0bf8a7e17f in operator new(unsigned long) (/usr/lib/x86_64-linux-gnu/libasan.so.5+0x10e17f)\n>     #1 0x564c7205f7b0 in ViewFinder::setFormat(unsigned int, unsigned int, unsigned int) ../src/qcam/viewfinder.cpp:43\n>     #2 0x564c71fec467 in MainWindow::startCapture() ../src/qcam/main_window.cpp:152\n>     #3 0x564c71fe6c1a in MainWindow::MainWindow(libcamera::CameraManager*, OptionsParser::Options const&) ../src/qcam/main_window.cpp:40\n>     #4 0x564c71fdf133 in main ../src/qcam/main.cpp:76\n>     #5 0x7f0bf5944b6a in __libc_start_main (/lib/x86_64-linux-gnu/libc.so.6+0x26b6a)\n> \n> Provide a ViewFinder destructor, and delete the allocation as\n> appropriate.\n\nMinor addition to the patch:\n\nFixes: 97e8b3a2eb32 (\"qcam: Add Qt-based GUI application\")\n\n> Signed-off-by: Kieran Bingham <kieran.bingham@ideasonboard.com>\n> ---\n>  src/qcam/viewfinder.cpp | 5 +++++\n>  src/qcam/viewfinder.h   | 1 +\n>  2 files changed, 6 insertions(+)\n> \n> diff --git a/src/qcam/viewfinder.cpp b/src/qcam/viewfinder.cpp\n> index 224a227ddd5b..98a8ab68e5f6 100644\n> --- a/src/qcam/viewfinder.cpp\n> +++ b/src/qcam/viewfinder.cpp\n> @@ -16,6 +16,11 @@ ViewFinder::ViewFinder(QWidget *parent)\n>  {\n>  }\n>  \n> +ViewFinder::~ViewFinder()\n> +{\n> +\tdelete image_;\n> +}\n> +\n>  void ViewFinder::display(const unsigned char *raw, size_t size)\n>  {\n>  \tconverter_.convert(raw, size, image_);\n> diff --git a/src/qcam/viewfinder.h b/src/qcam/viewfinder.h\n> index c9ca98913e05..33bdb1460f84 100644\n> --- a/src/qcam/viewfinder.h\n> +++ b/src/qcam/viewfinder.h\n> @@ -17,6 +17,7 @@ class ViewFinder : public QLabel\n>  {\n>  public:\n>  \tViewFinder(QWidget *parent);\n> +\t~ViewFinder();\n>  \n>  \tint setFormat(unsigned int format, unsigned int width,\n>  \t\t      unsigned int height);\n>","headers":{"Return-Path":"<kieran.bingham@ideasonboard.com>","Received":["from perceval.ideasonboard.com (perceval.ideasonboard.com\n\t[213.167.242.64])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id B752460BB0\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tMon, 23 Sep 2019 15:24:19 +0200 (CEST)","from [192.168.0.20]\n\t(cpc89242-aztw30-2-0-cust488.18-1.cable.virginm.net [86.31.129.233])\n\tby perceval.ideasonboard.com (Postfix) with ESMTPSA id 2789153B;\n\tMon, 23 Sep 2019 15:24:19 +0200 (CEST)"],"DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com;\n\ts=mail; t=1569245059;\n\tbh=K0wg3cSHbqtLm1D5OXMRj828Bdd88n+DIrMI/1ADsEc=;\n\th=Reply-To:Subject:To:References:From:Date:In-Reply-To:From;\n\tb=GR3R+Wu09XzJO3uh8xohfERS1dYSha+ivC7uCMdsYh+FHU8lzCw4iNmPi3qEcLtDx\n\tNB7LQOTKi05pYkCkR98yjiysu+JFAwbrZ4QHIgMLjhqGWrvKAav05AEcSRGSXSrnr9\n\tpHK0wiRwGaA1Po5ewBzfGHI0GnlvwuMFgd3IEP0M=","Reply-To":"kieran.bingham@ideasonboard.com","To":"Kieran Bingham <kieran.bingham@ideasonboard.com>,\n\tLibCamera Devel <libcamera-devel@lists.libcamera.org>","References":"<20190923132229.17027-1-kieran.bingham@ideasonboard.com>","From":"Kieran Bingham <kieran.bingham@ideasonboard.com>","Openpgp":"preference=signencrypt","Autocrypt":"addr=kieran.bingham@ideasonboard.com; keydata=\n\t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","Organization":"Ideas on Board","Message-ID":"<fcd73eb2-0a8a-5b28-a574-058e3f6ae998@ideasonboard.com>","Date":"Mon, 23 Sep 2019 14:24:17 +0100","User-Agent":"Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101\n\tThunderbird/60.8.0","MIME-Version":"1.0","In-Reply-To":"<20190923132229.17027-1-kieran.bingham@ideasonboard.com>","Content-Type":"text/plain; charset=utf-8","Content-Language":"en-GB","Content-Transfer-Encoding":"7bit","Subject":"Re: [libcamera-devel] [PATCH] qcam: Fix ViewFinder memory leak","X-BeenThere":"libcamera-devel@lists.libcamera.org","X-Mailman-Version":"2.1.23","Precedence":"list","List-Id":"<libcamera-devel.lists.libcamera.org>","List-Unsubscribe":"<https://lists.libcamera.org/options/libcamera-devel>,\n\t<mailto:libcamera-devel-request@lists.libcamera.org?subject=unsubscribe>","List-Archive":"<https://lists.libcamera.org/pipermail/libcamera-devel/>","List-Post":"<mailto:libcamera-devel@lists.libcamera.org>","List-Help":"<mailto:libcamera-devel-request@lists.libcamera.org?subject=help>","List-Subscribe":"<https://lists.libcamera.org/listinfo/libcamera-devel>,\n\t<mailto:libcamera-devel-request@lists.libcamera.org?subject=subscribe>","X-List-Received-Date":"Mon, 23 Sep 2019 13:24:19 -0000"}},{"id":2689,"web_url":"https://patchwork.libcamera.org/comment/2689/","msgid":"<20190924081600.htxxgkxmj4fafseq@uno.localdomain>","date":"2019-09-24T08:16:00","subject":"Re: [libcamera-devel] [PATCH] qcam: Fix ViewFinder memory leak","submitter":{"id":3,"url":"https://patchwork.libcamera.org/api/people/3/","name":"Jacopo Mondi","email":"jacopo@jmondi.org"},"content":"Hi Kieran,\n\nOn Mon, Sep 23, 2019 at 02:22:29PM +0100, Kieran Bingham wrote:\n> When setting the format on the ViewFinder, a new image_ is allocated.\n> Any change in format deletes the existing allocation, but it is not\n> cleaned up on shutdown:\n>\n> Direct leak of 32 byte(s) in 1 object(s) allocated from:\n>     #0 0x7f0bf8a7e17f in operator new(unsigned long) (/usr/lib/x86_64-linux-gnu/libasan.so.5+0x10e17f)\n>     #1 0x564c7205f7b0 in ViewFinder::setFormat(unsigned int, unsigned int, unsigned int) ../src/qcam/viewfinder.cpp:43\n>     #2 0x564c71fec467 in MainWindow::startCapture() ../src/qcam/main_window.cpp:152\n>     #3 0x564c71fe6c1a in MainWindow::MainWindow(libcamera::CameraManager*, OptionsParser::Options const&) ../src/qcam/main_window.cpp:40\n>     #4 0x564c71fdf133 in main ../src/qcam/main.cpp:76\n>     #5 0x7f0bf5944b6a in __libc_start_main (/lib/x86_64-linux-gnu/libc.so.6+0x26b6a)\n>\n> Provide a ViewFinder destructor, and delete the allocation as\n> appropriate.\n\nGood catch, but I don't see where the viewfinder gets destroyed in\nmain_window.cpp. How does the newly added destructor gets called?\n\nThanks\n   j\n\n>\n> Signed-off-by: Kieran Bingham <kieran.bingham@ideasonboard.com>\n> ---\n>  src/qcam/viewfinder.cpp | 5 +++++\n>  src/qcam/viewfinder.h   | 1 +\n>  2 files changed, 6 insertions(+)\n>\n> diff --git a/src/qcam/viewfinder.cpp b/src/qcam/viewfinder.cpp\n> index 224a227ddd5b..98a8ab68e5f6 100644\n> --- a/src/qcam/viewfinder.cpp\n> +++ b/src/qcam/viewfinder.cpp\n> @@ -16,6 +16,11 @@ ViewFinder::ViewFinder(QWidget *parent)\n>  {\n>  }\n>\n> +ViewFinder::~ViewFinder()\n> +{\n> +\tdelete image_;\n> +}\n> +\n>  void ViewFinder::display(const unsigned char *raw, size_t size)\n>  {\n>  \tconverter_.convert(raw, size, image_);\n> diff --git a/src/qcam/viewfinder.h b/src/qcam/viewfinder.h\n> index c9ca98913e05..33bdb1460f84 100644\n> --- a/src/qcam/viewfinder.h\n> +++ b/src/qcam/viewfinder.h\n> @@ -17,6 +17,7 @@ class ViewFinder : public QLabel\n>  {\n>  public:\n>  \tViewFinder(QWidget *parent);\n> +\t~ViewFinder();\n>\n>  \tint setFormat(unsigned int format, unsigned int width,\n>  \t\t      unsigned int height);\n> --\n> 2.20.1\n>\n> _______________________________________________\n> libcamera-devel mailing list\n> libcamera-devel@lists.libcamera.org\n> https://lists.libcamera.org/listinfo/libcamera-devel","headers":{"Return-Path":"<jacopo@jmondi.org>","Received":["from relay4-d.mail.gandi.net (relay4-d.mail.gandi.net\n\t[217.70.183.196])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id 15ACE60C17\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tTue, 24 Sep 2019 10:14:21 +0200 (CEST)","from uno.localdomain\n\t(host89-248-dynamic.45-213-r.retail.telecomitalia.it [213.45.248.89])\n\t(Authenticated sender: jacopo@jmondi.org)\n\tby relay4-d.mail.gandi.net (Postfix) with ESMTPSA id 56669E0014;\n\tTue, 24 Sep 2019 08:14:20 +0000 (UTC)"],"X-Originating-IP":"213.45.248.89","Date":"Tue, 24 Sep 2019 10:16:00 +0200","From":"Jacopo Mondi <jacopo@jmondi.org>","To":"Kieran Bingham <kieran.bingham@ideasonboard.com>","Cc":"LibCamera Devel <libcamera-devel@lists.libcamera.org>","Message-ID":"<20190924081600.htxxgkxmj4fafseq@uno.localdomain>","References":"<20190923132229.17027-1-kieran.bingham@ideasonboard.com>","MIME-Version":"1.0","Content-Type":"multipart/signed; micalg=pgp-sha256;\n\tprotocol=\"application/pgp-signature\"; boundary=\"zhhakmm7keclct5s\"","Content-Disposition":"inline","In-Reply-To":"<20190923132229.17027-1-kieran.bingham@ideasonboard.com>","User-Agent":"NeoMutt/20180716","Subject":"Re: [libcamera-devel] [PATCH] qcam: Fix ViewFinder memory leak","X-BeenThere":"libcamera-devel@lists.libcamera.org","X-Mailman-Version":"2.1.29","Precedence":"list","List-Id":"<libcamera-devel.lists.libcamera.org>","List-Unsubscribe":"<https://lists.libcamera.org/options/libcamera-devel>,\n\t<mailto:libcamera-devel-request@lists.libcamera.org?subject=unsubscribe>","List-Archive":"<https://lists.libcamera.org/pipermail/libcamera-devel/>","List-Post":"<mailto:libcamera-devel@lists.libcamera.org>","List-Help":"<mailto:libcamera-devel-request@lists.libcamera.org?subject=help>","List-Subscribe":"<https://lists.libcamera.org/listinfo/libcamera-devel>,\n\t<mailto:libcamera-devel-request@lists.libcamera.org?subject=subscribe>","X-List-Received-Date":"Tue, 24 Sep 2019 08:14:21 -0000"}},{"id":2691,"web_url":"https://patchwork.libcamera.org/comment/2691/","msgid":"<99d96e47-6011-1b7a-0338-1dd496063d30@ideasonboard.com>","date":"2019-09-24T11:51:32","subject":"Re: [libcamera-devel] [PATCH] qcam: Fix ViewFinder memory leak","submitter":{"id":4,"url":"https://patchwork.libcamera.org/api/people/4/","name":"Kieran Bingham","email":"kieran.bingham@ideasonboard.com"},"content":"Hi Jacopo,\n\nOn 24/09/2019 09:16, Jacopo Mondi wrote:\n> Hi Kieran,\n> \n> On Mon, Sep 23, 2019 at 02:22:29PM +0100, Kieran Bingham wrote:\n>> When setting the format on the ViewFinder, a new image_ is allocated.\n>> Any change in format deletes the existing allocation, but it is not\n>> cleaned up on shutdown:\n>>\n>> Direct leak of 32 byte(s) in 1 object(s) allocated from:\n>>     #0 0x7f0bf8a7e17f in operator new(unsigned long) (/usr/lib/x86_64-linux-gnu/libasan.so.5+0x10e17f)\n>>     #1 0x564c7205f7b0 in ViewFinder::setFormat(unsigned int, unsigned int, unsigned int) ../src/qcam/viewfinder.cpp:43\n>>     #2 0x564c71fec467 in MainWindow::startCapture() ../src/qcam/main_window.cpp:152\n>>     #3 0x564c71fe6c1a in MainWindow::MainWindow(libcamera::CameraManager*, OptionsParser::Options const&) ../src/qcam/main_window.cpp:40\n>>     #4 0x564c71fdf133 in main ../src/qcam/main.cpp:76\n>>     #5 0x7f0bf5944b6a in __libc_start_main (/lib/x86_64-linux-gnu/libc.so.6+0x26b6a)\n>>\n>> Provide a ViewFinder destructor, and delete the allocation as\n>> appropriate.\n> \n> Good catch, but I don't see where the viewfinder gets destroyed in\n> main_window.cpp. How does the newly added destructor gets called?\n\nIntriguing, the addition of the destructor made the LeakSanitizer\nwarning go away, however I believe you are right. There is no explicit\ncall to delete the ViewFinder which is created as part of the MainWindow.\n\nI'll add this, and respin a v2.\n\n--\nThanks\n\nKieran\n\n\n> \n> Thanks\n>    j\n> \n>>\n>> Signed-off-by: Kieran Bingham <kieran.bingham@ideasonboard.com>\n>> ---\n>>  src/qcam/viewfinder.cpp | 5 +++++\n>>  src/qcam/viewfinder.h   | 1 +\n>>  2 files changed, 6 insertions(+)\n>>\n>> diff --git a/src/qcam/viewfinder.cpp b/src/qcam/viewfinder.cpp\n>> index 224a227ddd5b..98a8ab68e5f6 100644\n>> --- a/src/qcam/viewfinder.cpp\n>> +++ b/src/qcam/viewfinder.cpp\n>> @@ -16,6 +16,11 @@ ViewFinder::ViewFinder(QWidget *parent)\n>>  {\n>>  }\n>>\n>> +ViewFinder::~ViewFinder()\n>> +{\n>> +\tdelete image_;\n>> +}\n>> +\n>>  void ViewFinder::display(const unsigned char *raw, size_t size)\n>>  {\n>>  \tconverter_.convert(raw, size, image_);\n>> diff --git a/src/qcam/viewfinder.h b/src/qcam/viewfinder.h\n>> index c9ca98913e05..33bdb1460f84 100644\n>> --- a/src/qcam/viewfinder.h\n>> +++ b/src/qcam/viewfinder.h\n>> @@ -17,6 +17,7 @@ class ViewFinder : public QLabel\n>>  {\n>>  public:\n>>  \tViewFinder(QWidget *parent);\n>> +\t~ViewFinder();\n>>\n>>  \tint setFormat(unsigned int format, unsigned int width,\n>>  \t\t      unsigned int height);\n>> --\n>> 2.20.1\n>>\n>> _______________________________________________\n>> libcamera-devel mailing list\n>> libcamera-devel@lists.libcamera.org\n>> https://lists.libcamera.org/listinfo/libcamera-devel","headers":{"Return-Path":"<kieran.bingham@ideasonboard.com>","Received":["from perceval.ideasonboard.com (perceval.ideasonboard.com\n\t[IPv6:2001:4b98:dc2:55:216:3eff:fef7:d647])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id 85E3C6166F\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tTue, 24 Sep 2019 13:51:36 +0200 (CEST)","from [192.168.0.20]\n\t(cpc89242-aztw30-2-0-cust488.18-1.cable.virginm.net [86.31.129.233])\n\tby perceval.ideasonboard.com (Postfix) with ESMTPSA id DE7B251A;\n\tTue, 24 Sep 2019 13:51:35 +0200 (CEST)"],"DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com;\n\ts=mail; t=1569325896;\n\tbh=HgKNR7H531Ra8/PbdbL53EkhcqLv0IzTP7amlIxXpvE=;\n\th=Reply-To:Subject:To:Cc:References:From:Date:In-Reply-To:From;\n\tb=mBlz5ZIl7Z/mMC/QHPVSYqQpa4vgPD0Pvrxey5CeSel3/JajahR6Oq9DCiKooUvbE\n\t6L8GTiIATnI8e6lA1+HveLagweQqEUjF5s1YYvDTThQKF4RCreekCPvYDHxPTmBM2n\n\tPksvU9J7H94cfOBD+Sp+1pdRh6IRWV+J56KMj4+Q=","Reply-To":"kieran.bingham@ideasonboard.com","To":"Jacopo Mondi <jacopo@jmondi.org>","Cc":"LibCamera Devel <libcamera-devel@lists.libcamera.org>","References":"<20190923132229.17027-1-kieran.bingham@ideasonboard.com>\n\t<20190924081600.htxxgkxmj4fafseq@uno.localdomain>","From":"Kieran Bingham <kieran.bingham@ideasonboard.com>","Openpgp":"preference=signencrypt","Autocrypt":"addr=kieran.bingham@ideasonboard.com; keydata=\n\tmQINBFYE/WYBEACs1PwjMD9rgCu1hlIiUA1AXR4rv2v+BCLUq//vrX5S5bjzxKAryRf0uHat\n\tV/zwz6hiDrZuHUACDB7X8OaQcwhLaVlq6byfoBr25+hbZG7G3+5EUl9cQ7dQEdvNj6V6y/SC\n\trRanWfelwQThCHckbobWiQJfK9n7rYNcPMq9B8e9F020LFH7Kj6YmO95ewJGgLm+idg1Kb3C\n\tpotzWkXc1xmPzcQ1fvQMOfMwdS+4SNw4rY9f07Xb2K99rjMwZVDgESKIzhsDB5GY465sCsiQ\n\tcSAZRxqE49RTBq2+EQsbrQpIc8XiffAB8qexh5/QPzCmR4kJgCGeHIXBtgRj+nIkCJPZvZtf\n\tKr2EAbc6tgg6DkAEHJb+1okosV09+0+TXywYvtEop/WUOWQ+zo+Y/OBd+8Ptgt1pDRyOBzL8\n\tRXa8ZqRf0Mwg75D+dKntZeJHzPRJyrlfQokngAAs4PaFt6UfS+ypMAF37T6CeDArQC41V3ko\n\tlPn1yMsVD0p+6i3DPvA/GPIksDC4owjnzVX9kM8Zc5Cx+XoAN0w5Eqo4t6qEVbuettxx55gq\n\t8K8FieAjgjMSxngo/HST8TpFeqI5nVeq0/lqtBRQKumuIqDg+Bkr4L1V/PSB6XgQcOdhtd36\n\tOe9X9dXB8YSNt7VjOcO7BTmFn/Z8r92mSAfHXpb07YJWJosQOQARAQABtDBLaWVyYW4gQmlu\n\tZ2hhbSA8a2llcmFuLmJpbmdoYW1AaWRlYXNvbmJvYXJkLmNvbT6JAlcEEwEKAEECGwMFCwkI\n\tBwIGFQgJCgsCBBYCAwECHgECF4ACGQEWIQSQLdeYP70o/eNy1HqhHkZyEKRh/QUCXWTtygUJ\n\tCyJXZAAKCRChHkZyEKRh/f8dEACTDsbLN2nioNZMwyLuQRUAFcXNolDX48xcUXsWS2QjxaPm\n\tVsJx8Uy8aYkS85mdPBh0C83OovQR/OVbr8AxhGvYqBs3nQvbWuTl/+4od7DfK2VZOoKBAu5S\n\tQK2FYuUcikDqYcFWJ8DQnubxfE8dvzojHEkXw0sA4igINHDDFX3HJGZtLio+WpEFQtCbfTAG\n\tYZslasz1YZRbwEdSsmO3/kqy5eMnczlm8a21A3fKUo3g8oAZEFM+f4DUNzqIltg31OAB/kZS\n\tenKZQ/SWC8PmLg/ZXBrReYakxXtkP6w3FwMlzOlhGxqhIRNiAJfXJBaRhuUWzPOpEDE9q5YJ\n\tBmqQL2WJm1VSNNVxbXJHpaWMH1sA2R00vmvRrPXGwyIO0IPYeUYQa3gsy6k+En/aMQJd27dp\n\taScf9am9PFICPY5T4ppneeJLif2lyLojo0mcHOV+uyrds9XkLpp14GfTkeKPdPMrLLTsHRfH\n\tfA4I4OBpRrEPiGIZB/0im98MkGY/Mu6qxeZmYLCcgD6qz4idOvfgVOrNh+aA8HzIVR+RMW8H\n\tQGBN9f0E3kfwxuhl3omo6V7lDw8XOdmuWZNC9zPq1UfryVHANYbLGz9KJ4Aw6M+OgBC2JpkD\n\thXMdHUkC+d20dwXrwHTlrJi1YNp6rBc+xald3wsUPOZ5z8moTHUX/uPA/qhGsbkCDQRWBP1m\n\tARAAzijkb+Sau4hAncr1JjOY+KyFEdUNxRy+hqTJdJfaYihxyaj0Ee0P0zEi35CbE6lgU0Uz\n\ttih9fiUbSV3wfsWqg1Ut3/5rTKu7kLFp15kF7eqvV4uezXRD3Qu4yjv/rMmEJbbD4cTvGCYI\n\td6MDC417f7vK3hCbCVIZSp3GXxyC1LU+UQr3fFcOyCwmP9vDUR9JV0BSqHHxRDdpUXE26Dk6\n\tmhf0V1YkspE5St814ETXpEus2urZE5yJIUROlWPIL+hm3NEWfAP06vsQUyLvr/GtbOT79vXl\n\tEn1aulcYyu20dRRxhkQ6iILaURcxIAVJJKPi8dsoMnS8pB0QW12AHWuirPF0g6DiuUfPmrA5\n\tPKe56IGlpkjc8cO51lIxHkWTpCMWigRdPDexKX+Sb+W9QWK/0JjIc4t3KBaiG8O4yRX8ml2R\n\t+rxfAVKM6V769P/hWoRGdgUMgYHFpHGSgEt80OKK5HeUPy2cngDUXzwrqiM5Sz6Od0qw5pCk\n\tNlXqI0W/who0iSVM+8+RmyY0OEkxEcci7rRLsGnM15B5PjLJjh1f2ULYkv8s4SnDwMZ/kE04\n\t/UqCMK/KnX8pwXEMCjz0h6qWNpGwJ0/tYIgQJZh6bqkvBrDogAvuhf60Sogw+mH8b+PBlx1L\n\toeTK396wc+4c3BfiC6pNtUS5GpsPMMjYMk7kVvEAEQEAAYkCJQQYAQoADwIbDAUCWcOUawUJ\n\tB4D+AgAKCRChHkZyEKRh/XJhEACr5iidt/0MZ0rWRMCbZFMWD7D2g6nZeOp+F2zY8CEUW+sd\n\tCDVd9BH9QX9KN5SZo6YtJzMzSzpcx45VwTvtQW0n/6Eujg9EUqblfU9xqvqDmbjEapr5d/OL\n\t21GTALb0owKhA5qDUGEcKGCphpQffKhTNo/BP99jvmJUj7IPSKH97qPypi8/ym8bAxB+uY31\n\tgHTMHf1jMJJ1pRo2tYYPeIIHGDqXBI4sp5GHHF+JcIhgR/e/A6w/dgzHYmQPl2ix5eZYEZbV\n\tTRP+gkX4NV8oHqa/lR+xPOlWElGB57viOSOoWriqxQbFy8XbG1GR8cWlkNtGBGVWaJaSoORP\n\tiowD7irXL91bCyFIqL+7BVk3Jy4uzP744PzE80KwxOp5SQAp9sPzFbgsJrLev90PZySjFHG0\n\twP144DK7nBjOj/J0g9OHVASP1JjK+nw7SDoKnETDIdRC0XmiHXk7TXzPdkvO0UkpHdEPjZUp\n\tWyuc0MqehjR/hTTPt4m/Y14XzEcy6JREIjOrFfUZVho2QpOdv9CNryGdieRTNjUtz463CIaZ\n\tdPBiw9mOMBoNffkn9FIoCjLnAaj9gUAnEHWBZOEviQ5NuyqpeP0YtzI4iaRbSUkYZHej99X3\n\tVmHrdLlMqd/ZgYYbPGSL4AN3FVACb5CxuxEHwo029VcE5U3CSjzqtCoX12tm7A==","Organization":"Ideas on Board","Message-ID":"<99d96e47-6011-1b7a-0338-1dd496063d30@ideasonboard.com>","Date":"Tue, 24 Sep 2019 12:51:32 +0100","User-Agent":"Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101\n\tThunderbird/60.8.0","MIME-Version":"1.0","In-Reply-To":"<20190924081600.htxxgkxmj4fafseq@uno.localdomain>","Content-Type":"text/plain; charset=utf-8","Content-Language":"en-GB","Content-Transfer-Encoding":"7bit","Subject":"Re: [libcamera-devel] [PATCH] qcam: Fix ViewFinder memory leak","X-BeenThere":"libcamera-devel@lists.libcamera.org","X-Mailman-Version":"2.1.29","Precedence":"list","List-Id":"<libcamera-devel.lists.libcamera.org>","List-Unsubscribe":"<https://lists.libcamera.org/options/libcamera-devel>,\n\t<mailto:libcamera-devel-request@lists.libcamera.org?subject=unsubscribe>","List-Archive":"<https://lists.libcamera.org/pipermail/libcamera-devel/>","List-Post":"<mailto:libcamera-devel@lists.libcamera.org>","List-Help":"<mailto:libcamera-devel-request@lists.libcamera.org?subject=help>","List-Subscribe":"<https://lists.libcamera.org/listinfo/libcamera-devel>,\n\t<mailto:libcamera-devel-request@lists.libcamera.org?subject=subscribe>","X-List-Received-Date":"Tue, 24 Sep 2019 11:51:36 -0000"}},{"id":2692,"web_url":"https://patchwork.libcamera.org/comment/2692/","msgid":"<20190924115450.GA4883@pendragon.ideasonboard.com>","date":"2019-09-24T11:54:50","subject":"Re: [libcamera-devel] [PATCH] qcam: Fix ViewFinder memory leak","submitter":{"id":2,"url":"https://patchwork.libcamera.org/api/people/2/","name":"Laurent Pinchart","email":"laurent.pinchart@ideasonboard.com"},"content":"Hello,\n\nOn Tue, Sep 24, 2019 at 12:51:32PM +0100, Kieran Bingham wrote:\n> On 24/09/2019 09:16, Jacopo Mondi wrote:\n> > On Mon, Sep 23, 2019 at 02:22:29PM +0100, Kieran Bingham wrote:\n> >> When setting the format on the ViewFinder, a new image_ is allocated.\n> >> Any change in format deletes the existing allocation, but it is not\n> >> cleaned up on shutdown:\n> >>\n> >> Direct leak of 32 byte(s) in 1 object(s) allocated from:\n> >>     #0 0x7f0bf8a7e17f in operator new(unsigned long) (/usr/lib/x86_64-linux-gnu/libasan.so.5+0x10e17f)\n> >>     #1 0x564c7205f7b0 in ViewFinder::setFormat(unsigned int, unsigned int, unsigned int) ../src/qcam/viewfinder.cpp:43\n> >>     #2 0x564c71fec467 in MainWindow::startCapture() ../src/qcam/main_window.cpp:152\n> >>     #3 0x564c71fe6c1a in MainWindow::MainWindow(libcamera::CameraManager*, OptionsParser::Options const&) ../src/qcam/main_window.cpp:40\n> >>     #4 0x564c71fdf133 in main ../src/qcam/main.cpp:76\n> >>     #5 0x7f0bf5944b6a in __libc_start_main (/lib/x86_64-linux-gnu/libc.so.6+0x26b6a)\n> >>\n> >> Provide a ViewFinder destructor, and delete the allocation as\n> >> appropriate.\n> > \n> > Good catch, but I don't see where the viewfinder gets destroyed in\n> > main_window.cpp. How does the newly added destructor gets called?\n> \n> Intriguing, the addition of the destructor made the LeakSanitizer\n> warning go away, however I believe you are right. There is no explicit\n> call to delete the ViewFinder which is created as part of the MainWindow.\n> \n> I'll add this, and respin a v2.\n\nNo need to, https://doc.qt.io/qt-5/qobject.html#dtor.QObject\n\nReviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>\n\n> >> Signed-off-by: Kieran Bingham <kieran.bingham@ideasonboard.com>\n> >> ---\n> >>  src/qcam/viewfinder.cpp | 5 +++++\n> >>  src/qcam/viewfinder.h   | 1 +\n> >>  2 files changed, 6 insertions(+)\n> >>\n> >> diff --git a/src/qcam/viewfinder.cpp b/src/qcam/viewfinder.cpp\n> >> index 224a227ddd5b..98a8ab68e5f6 100644\n> >> --- a/src/qcam/viewfinder.cpp\n> >> +++ b/src/qcam/viewfinder.cpp\n> >> @@ -16,6 +16,11 @@ ViewFinder::ViewFinder(QWidget *parent)\n> >>  {\n> >>  }\n> >>\n> >> +ViewFinder::~ViewFinder()\n> >> +{\n> >> +\tdelete image_;\n> >> +}\n> >> +\n> >>  void ViewFinder::display(const unsigned char *raw, size_t size)\n> >>  {\n> >>  \tconverter_.convert(raw, size, image_);\n> >> diff --git a/src/qcam/viewfinder.h b/src/qcam/viewfinder.h\n> >> index c9ca98913e05..33bdb1460f84 100644\n> >> --- a/src/qcam/viewfinder.h\n> >> +++ b/src/qcam/viewfinder.h\n> >> @@ -17,6 +17,7 @@ class ViewFinder : public QLabel\n> >>  {\n> >>  public:\n> >>  \tViewFinder(QWidget *parent);\n> >> +\t~ViewFinder();\n> >>\n> >>  \tint setFormat(unsigned int format, unsigned int width,\n> >>  \t\t      unsigned int height);","headers":{"Return-Path":"<laurent.pinchart@ideasonboard.com>","Received":["from perceval.ideasonboard.com (perceval.ideasonboard.com\n\t[213.167.242.64])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id AB7F062375\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tTue, 24 Sep 2019 13:55:00 +0200 (CEST)","from pendragon.ideasonboard.com\n\t(dfj612yhrgyx302h3jwwy-3.rev.dnainternet.fi\n\t[IPv6:2001:14ba:21f5:5b00:ce28:277f:58d7:3ca4])\n\tby perceval.ideasonboard.com (Postfix) with ESMTPSA id 1022351A;\n\tTue, 24 Sep 2019 13:54:59 +0200 (CEST)"],"DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com;\n\ts=mail; t=1569326100;\n\tbh=D7z+o/wSH9Jl6cWujLgeDa7lqnyYfSNlHCYmQ9OkEJs=;\n\th=Date:From:To:Cc:Subject:References:In-Reply-To:From;\n\tb=BpFeA0u7N7ez8FT2G3ijhzNAd/LrslzPcn7FdS9PBoSQu7gwUzMlJ+BddN4ZiD8p7\n\tFffpjvZV1LhEGNg2rtd1VoD2HCVf6uSHUvILYGFInikHLRxiFTY7KnuUsWy3HQ2kih\n\tKecRLwLwhF3SZYGUJo/odkF7iYk3n/X/ItSKNduo=","Date":"Tue, 24 Sep 2019 14:54:50 +0300","From":"Laurent Pinchart <laurent.pinchart@ideasonboard.com>","To":"Kieran Bingham <kieran.bingham@ideasonboard.com>","Cc":"Jacopo Mondi <jacopo@jmondi.org>,\n\tLibCamera Devel <libcamera-devel@lists.libcamera.org>","Message-ID":"<20190924115450.GA4883@pendragon.ideasonboard.com>","References":"<20190923132229.17027-1-kieran.bingham@ideasonboard.com>\n\t<20190924081600.htxxgkxmj4fafseq@uno.localdomain>\n\t<99d96e47-6011-1b7a-0338-1dd496063d30@ideasonboard.com>","MIME-Version":"1.0","Content-Type":"text/plain; charset=utf-8","Content-Disposition":"inline","In-Reply-To":"<99d96e47-6011-1b7a-0338-1dd496063d30@ideasonboard.com>","User-Agent":"Mutt/1.10.1 (2018-07-13)","Subject":"Re: [libcamera-devel] [PATCH] qcam: Fix ViewFinder memory leak","X-BeenThere":"libcamera-devel@lists.libcamera.org","X-Mailman-Version":"2.1.29","Precedence":"list","List-Id":"<libcamera-devel.lists.libcamera.org>","List-Unsubscribe":"<https://lists.libcamera.org/options/libcamera-devel>,\n\t<mailto:libcamera-devel-request@lists.libcamera.org?subject=unsubscribe>","List-Archive":"<https://lists.libcamera.org/pipermail/libcamera-devel/>","List-Post":"<mailto:libcamera-devel@lists.libcamera.org>","List-Help":"<mailto:libcamera-devel-request@lists.libcamera.org?subject=help>","List-Subscribe":"<https://lists.libcamera.org/listinfo/libcamera-devel>,\n\t<mailto:libcamera-devel-request@lists.libcamera.org?subject=subscribe>","X-List-Received-Date":"Tue, 24 Sep 2019 11:55:01 -0000"}},{"id":2693,"web_url":"https://patchwork.libcamera.org/comment/2693/","msgid":"<3c3700d9-6e05-f016-436c-ead60e3a9a04@ideasonboard.com>","date":"2019-09-24T12:00:58","subject":"Re: [libcamera-devel] [PATCH] qcam: Fix ViewFinder memory leak","submitter":{"id":4,"url":"https://patchwork.libcamera.org/api/people/4/","name":"Kieran Bingham","email":"kieran.bingham@ideasonboard.com"},"content":"Hi Laurent,\n\nOn 24/09/2019 12:54, Laurent Pinchart wrote:\n> Hello,\n> \n> On Tue, Sep 24, 2019 at 12:51:32PM +0100, Kieran Bingham wrote:\n>> On 24/09/2019 09:16, Jacopo Mondi wrote:\n>>> On Mon, Sep 23, 2019 at 02:22:29PM +0100, Kieran Bingham wrote:\n>>>> When setting the format on the ViewFinder, a new image_ is allocated.\n>>>> Any change in format deletes the existing allocation, but it is not\n>>>> cleaned up on shutdown:\n>>>>\n>>>> Direct leak of 32 byte(s) in 1 object(s) allocated from:\n>>>>     #0 0x7f0bf8a7e17f in operator new(unsigned long) (/usr/lib/x86_64-linux-gnu/libasan.so.5+0x10e17f)\n>>>>     #1 0x564c7205f7b0 in ViewFinder::setFormat(unsigned int, unsigned int, unsigned int) ../src/qcam/viewfinder.cpp:43\n>>>>     #2 0x564c71fec467 in MainWindow::startCapture() ../src/qcam/main_window.cpp:152\n>>>>     #3 0x564c71fe6c1a in MainWindow::MainWindow(libcamera::CameraManager*, OptionsParser::Options const&) ../src/qcam/main_window.cpp:40\n>>>>     #4 0x564c71fdf133 in main ../src/qcam/main.cpp:76\n>>>>     #5 0x7f0bf5944b6a in __libc_start_main (/lib/x86_64-linux-gnu/libc.so.6+0x26b6a)\n>>>>\n>>>> Provide a ViewFinder destructor, and delete the allocation as\n>>>> appropriate.\n>>>\n>>> Good catch, but I don't see where the viewfinder gets destroyed in\n>>> main_window.cpp. How does the newly added destructor gets called?\n>>\n>> Intriguing, the addition of the destructor made the LeakSanitizer\n>> warning go away, however I believe you are right. There is no explicit\n>> call to delete the ViewFinder which is created as part of the MainWindow.\n>>\n>> I'll add this, and respin a v2.\n> \n> No need to, https://doc.qt.io/qt-5/qobject.html#dtor.QObject\n\n\nAha - ok so because it's constructed with 'this' passed in the\ndestruction is linked:\n        viewfinder_ = new ViewFinder(this);\n\nThat explains why just cleaning up the QImage leak was enough.\n\nI'll stick with V1 then.\n\nRegards\n\nKieran\n\n\n> \n> Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>\n> \n>>>> Signed-off-by: Kieran Bingham <kieran.bingham@ideasonboard.com>\n>>>> ---\n>>>>  src/qcam/viewfinder.cpp | 5 +++++\n>>>>  src/qcam/viewfinder.h   | 1 +\n>>>>  2 files changed, 6 insertions(+)\n>>>>\n>>>> diff --git a/src/qcam/viewfinder.cpp b/src/qcam/viewfinder.cpp\n>>>> index 224a227ddd5b..98a8ab68e5f6 100644\n>>>> --- a/src/qcam/viewfinder.cpp\n>>>> +++ b/src/qcam/viewfinder.cpp\n>>>> @@ -16,6 +16,11 @@ ViewFinder::ViewFinder(QWidget *parent)\n>>>>  {\n>>>>  }\n>>>>\n>>>> +ViewFinder::~ViewFinder()\n>>>> +{\n>>>> +\tdelete image_;\n>>>> +}\n>>>> +\n>>>>  void ViewFinder::display(const unsigned char *raw, size_t size)\n>>>>  {\n>>>>  \tconverter_.convert(raw, size, image_);\n>>>> diff --git a/src/qcam/viewfinder.h b/src/qcam/viewfinder.h\n>>>> index c9ca98913e05..33bdb1460f84 100644\n>>>> --- a/src/qcam/viewfinder.h\n>>>> +++ b/src/qcam/viewfinder.h\n>>>> @@ -17,6 +17,7 @@ class ViewFinder : public QLabel\n>>>>  {\n>>>>  public:\n>>>>  \tViewFinder(QWidget *parent);\n>>>> +\t~ViewFinder();\n>>>>\n>>>>  \tint setFormat(unsigned int format, unsigned int width,\n>>>>  \t\t      unsigned int height);\n>","headers":{"Return-Path":"<kieran.bingham@ideasonboard.com>","Received":["from perceval.ideasonboard.com (perceval.ideasonboard.com\n\t[IPv6:2001:4b98:dc2:55:216:3eff:fef7:d647])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id B147662375\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tTue, 24 Sep 2019 14:01:02 +0200 (CEST)","from [192.168.0.20]\n\t(cpc89242-aztw30-2-0-cust488.18-1.cable.virginm.net [86.31.129.233])\n\tby perceval.ideasonboard.com (Postfix) with ESMTPSA id CE86651A;\n\tTue, 24 Sep 2019 14:01:01 +0200 (CEST)"],"DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com;\n\ts=mail; t=1569326462;\n\tbh=/pXctoS/jzFEffObzXC6c5EZjEZdOR7R6G4ddJnCJ2k=;\n\th=Reply-To:Subject:To:Cc:References:From:Date:In-Reply-To:From;\n\tb=VLPk5/BAzPk6tAN7pKAkpUW/hHmFphB6tp/clsMNvHez0l9oX6a8qRLvIg88D6oa0\n\tfWaKrqB/aZGcgCB753gQTnv+DdXqEp/MPHHBGEZjmZleRsrKAdC+kQ9f3JYlugN6e9\n\t5MTC6NXkI3dDEdV0SGEXiHRIJXflhhyc0LX/V8oo=","Reply-To":"kieran.bingham@ideasonboard.com","To":"Laurent Pinchart <laurent.pinchart@ideasonboard.com>","Cc":"Jacopo Mondi <jacopo@jmondi.org>,\n\tLibCamera Devel <libcamera-devel@lists.libcamera.org>","References":"<20190923132229.17027-1-kieran.bingham@ideasonboard.com>\n\t<20190924081600.htxxgkxmj4fafseq@uno.localdomain>\n\t<99d96e47-6011-1b7a-0338-1dd496063d30@ideasonboard.com>\n\t<20190924115450.GA4883@pendragon.ideasonboard.com>","From":"Kieran Bingham <kieran.bingham@ideasonboard.com>","Openpgp":"preference=signencrypt","Autocrypt":"addr=kieran.bingham@ideasonboard.com; keydata=\n\tmQINBFYE/WYBEACs1PwjMD9rgCu1hlIiUA1AXR4rv2v+BCLUq//vrX5S5bjzxKAryRf0uHat\n\tV/zwz6hiDrZuHUACDB7X8OaQcwhLaVlq6byfoBr25+hbZG7G3+5EUl9cQ7dQEdvNj6V6y/SC\n\trRanWfelwQThCHckbobWiQJfK9n7rYNcPMq9B8e9F020LFH7Kj6YmO95ewJGgLm+idg1Kb3C\n\tpotzWkXc1xmPzcQ1fvQMOfMwdS+4SNw4rY9f07Xb2K99rjMwZVDgESKIzhsDB5GY465sCsiQ\n\tcSAZRxqE49RTBq2+EQsbrQpIc8XiffAB8qexh5/QPzCmR4kJgCGeHIXBtgRj+nIkCJPZvZtf\n\tKr2EAbc6tgg6DkAEHJb+1okosV09+0+TXywYvtEop/WUOWQ+zo+Y/OBd+8Ptgt1pDRyOBzL8\n\tRXa8ZqRf0Mwg75D+dKntZeJHzPRJyrlfQokngAAs4PaFt6UfS+ypMAF37T6CeDArQC41V3ko\n\tlPn1yMsVD0p+6i3DPvA/GPIksDC4owjnzVX9kM8Zc5Cx+XoAN0w5Eqo4t6qEVbuettxx55gq\n\t8K8FieAjgjMSxngo/HST8TpFeqI5nVeq0/lqtBRQKumuIqDg+Bkr4L1V/PSB6XgQcOdhtd36\n\tOe9X9dXB8YSNt7VjOcO7BTmFn/Z8r92mSAfHXpb07YJWJosQOQARAQABtDBLaWVyYW4gQmlu\n\tZ2hhbSA8a2llcmFuLmJpbmdoYW1AaWRlYXNvbmJvYXJkLmNvbT6JAlcEEwEKAEECGwMFCwkI\n\tBwIGFQgJCgsCBBYCAwECHgECF4ACGQEWIQSQLdeYP70o/eNy1HqhHkZyEKRh/QUCXWTtygUJ\n\tCyJXZAAKCRChHkZyEKRh/f8dEACTDsbLN2nioNZMwyLuQRUAFcXNolDX48xcUXsWS2QjxaPm\n\tVsJx8Uy8aYkS85mdPBh0C83OovQR/OVbr8AxhGvYqBs3nQvbWuTl/+4od7DfK2VZOoKBAu5S\n\tQK2FYuUcikDqYcFWJ8DQnubxfE8dvzojHEkXw0sA4igINHDDFX3HJGZtLio+WpEFQtCbfTAG\n\tYZslasz1YZRbwEdSsmO3/kqy5eMnczlm8a21A3fKUo3g8oAZEFM+f4DUNzqIltg31OAB/kZS\n\tenKZQ/SWC8PmLg/ZXBrReYakxXtkP6w3FwMlzOlhGxqhIRNiAJfXJBaRhuUWzPOpEDE9q5YJ\n\tBmqQL2WJm1VSNNVxbXJHpaWMH1sA2R00vmvRrPXGwyIO0IPYeUYQa3gsy6k+En/aMQJd27dp\n\taScf9am9PFICPY5T4ppneeJLif2lyLojo0mcHOV+uyrds9XkLpp14GfTkeKPdPMrLLTsHRfH\n\tfA4I4OBpRrEPiGIZB/0im98MkGY/Mu6qxeZmYLCcgD6qz4idOvfgVOrNh+aA8HzIVR+RMW8H\n\tQGBN9f0E3kfwxuhl3omo6V7lDw8XOdmuWZNC9zPq1UfryVHANYbLGz9KJ4Aw6M+OgBC2JpkD\n\thXMdHUkC+d20dwXrwHTlrJi1YNp6rBc+xald3wsUPOZ5z8moTHUX/uPA/qhGsbkCDQRWBP1m\n\tARAAzijkb+Sau4hAncr1JjOY+KyFEdUNxRy+hqTJdJfaYihxyaj0Ee0P0zEi35CbE6lgU0Uz\n\ttih9fiUbSV3wfsWqg1Ut3/5rTKu7kLFp15kF7eqvV4uezXRD3Qu4yjv/rMmEJbbD4cTvGCYI\n\td6MDC417f7vK3hCbCVIZSp3GXxyC1LU+UQr3fFcOyCwmP9vDUR9JV0BSqHHxRDdpUXE26Dk6\n\tmhf0V1YkspE5St814ETXpEus2urZE5yJIUROlWPIL+hm3NEWfAP06vsQUyLvr/GtbOT79vXl\n\tEn1aulcYyu20dRRxhkQ6iILaURcxIAVJJKPi8dsoMnS8pB0QW12AHWuirPF0g6DiuUfPmrA5\n\tPKe56IGlpkjc8cO51lIxHkWTpCMWigRdPDexKX+Sb+W9QWK/0JjIc4t3KBaiG8O4yRX8ml2R\n\t+rxfAVKM6V769P/hWoRGdgUMgYHFpHGSgEt80OKK5HeUPy2cngDUXzwrqiM5Sz6Od0qw5pCk\n\tNlXqI0W/who0iSVM+8+RmyY0OEkxEcci7rRLsGnM15B5PjLJjh1f2ULYkv8s4SnDwMZ/kE04\n\t/UqCMK/KnX8pwXEMCjz0h6qWNpGwJ0/tYIgQJZh6bqkvBrDogAvuhf60Sogw+mH8b+PBlx1L\n\toeTK396wc+4c3BfiC6pNtUS5GpsPMMjYMk7kVvEAEQEAAYkCJQQYAQoADwIbDAUCWcOUawUJ\n\tB4D+AgAKCRChHkZyEKRh/XJhEACr5iidt/0MZ0rWRMCbZFMWD7D2g6nZeOp+F2zY8CEUW+sd\n\tCDVd9BH9QX9KN5SZo6YtJzMzSzpcx45VwTvtQW0n/6Eujg9EUqblfU9xqvqDmbjEapr5d/OL\n\t21GTALb0owKhA5qDUGEcKGCphpQffKhTNo/BP99jvmJUj7IPSKH97qPypi8/ym8bAxB+uY31\n\tgHTMHf1jMJJ1pRo2tYYPeIIHGDqXBI4sp5GHHF+JcIhgR/e/A6w/dgzHYmQPl2ix5eZYEZbV\n\tTRP+gkX4NV8oHqa/lR+xPOlWElGB57viOSOoWriqxQbFy8XbG1GR8cWlkNtGBGVWaJaSoORP\n\tiowD7irXL91bCyFIqL+7BVk3Jy4uzP744PzE80KwxOp5SQAp9sPzFbgsJrLev90PZySjFHG0\n\twP144DK7nBjOj/J0g9OHVASP1JjK+nw7SDoKnETDIdRC0XmiHXk7TXzPdkvO0UkpHdEPjZUp\n\tWyuc0MqehjR/hTTPt4m/Y14XzEcy6JREIjOrFfUZVho2QpOdv9CNryGdieRTNjUtz463CIaZ\n\tdPBiw9mOMBoNffkn9FIoCjLnAaj9gUAnEHWBZOEviQ5NuyqpeP0YtzI4iaRbSUkYZHej99X3\n\tVmHrdLlMqd/ZgYYbPGSL4AN3FVACb5CxuxEHwo029VcE5U3CSjzqtCoX12tm7A==","Organization":"Ideas on Board","Message-ID":"<3c3700d9-6e05-f016-436c-ead60e3a9a04@ideasonboard.com>","Date":"Tue, 24 Sep 2019 13:00:58 +0100","User-Agent":"Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101\n\tThunderbird/60.8.0","MIME-Version":"1.0","In-Reply-To":"<20190924115450.GA4883@pendragon.ideasonboard.com>","Content-Type":"text/plain; charset=utf-8","Content-Language":"en-GB","Content-Transfer-Encoding":"7bit","Subject":"Re: [libcamera-devel] [PATCH] qcam: Fix ViewFinder memory leak","X-BeenThere":"libcamera-devel@lists.libcamera.org","X-Mailman-Version":"2.1.29","Precedence":"list","List-Id":"<libcamera-devel.lists.libcamera.org>","List-Unsubscribe":"<https://lists.libcamera.org/options/libcamera-devel>,\n\t<mailto:libcamera-devel-request@lists.libcamera.org?subject=unsubscribe>","List-Archive":"<https://lists.libcamera.org/pipermail/libcamera-devel/>","List-Post":"<mailto:libcamera-devel@lists.libcamera.org>","List-Help":"<mailto:libcamera-devel-request@lists.libcamera.org?subject=help>","List-Subscribe":"<https://lists.libcamera.org/listinfo/libcamera-devel>,\n\t<mailto:libcamera-devel-request@lists.libcamera.org?subject=subscribe>","X-List-Received-Date":"Tue, 24 Sep 2019 12:01:02 -0000"}},{"id":2694,"web_url":"https://patchwork.libcamera.org/comment/2694/","msgid":"<20190924121356.GB4883@pendragon.ideasonboard.com>","date":"2019-09-24T12:13:56","subject":"Re: [libcamera-devel] [PATCH] qcam: Fix ViewFinder memory leak","submitter":{"id":2,"url":"https://patchwork.libcamera.org/api/people/2/","name":"Laurent Pinchart","email":"laurent.pinchart@ideasonboard.com"},"content":"Hi Kieran,\n\nOn Tue, Sep 24, 2019 at 01:00:58PM +0100, Kieran Bingham wrote:\n> On 24/09/2019 12:54, Laurent Pinchart wrote:\n> > On Tue, Sep 24, 2019 at 12:51:32PM +0100, Kieran Bingham wrote:\n> >> On 24/09/2019 09:16, Jacopo Mondi wrote:\n> >>> On Mon, Sep 23, 2019 at 02:22:29PM +0100, Kieran Bingham wrote:\n> >>>> When setting the format on the ViewFinder, a new image_ is allocated.\n> >>>> Any change in format deletes the existing allocation, but it is not\n> >>>> cleaned up on shutdown:\n> >>>>\n> >>>> Direct leak of 32 byte(s) in 1 object(s) allocated from:\n> >>>>     #0 0x7f0bf8a7e17f in operator new(unsigned long) (/usr/lib/x86_64-linux-gnu/libasan.so.5+0x10e17f)\n> >>>>     #1 0x564c7205f7b0 in ViewFinder::setFormat(unsigned int, unsigned int, unsigned int) ../src/qcam/viewfinder.cpp:43\n> >>>>     #2 0x564c71fec467 in MainWindow::startCapture() ../src/qcam/main_window.cpp:152\n> >>>>     #3 0x564c71fe6c1a in MainWindow::MainWindow(libcamera::CameraManager*, OptionsParser::Options const&) ../src/qcam/main_window.cpp:40\n> >>>>     #4 0x564c71fdf133 in main ../src/qcam/main.cpp:76\n> >>>>     #5 0x7f0bf5944b6a in __libc_start_main (/lib/x86_64-linux-gnu/libc.so.6+0x26b6a)\n> >>>>\n> >>>> Provide a ViewFinder destructor, and delete the allocation as\n> >>>> appropriate.\n> >>>\n> >>> Good catch, but I don't see where the viewfinder gets destroyed in\n> >>> main_window.cpp. How does the newly added destructor gets called?\n> >>\n> >> Intriguing, the addition of the destructor made the LeakSanitizer\n> >> warning go away, however I believe you are right. There is no explicit\n> >> call to delete the ViewFinder which is created as part of the MainWindow.\n> >>\n> >> I'll add this, and respin a v2.\n> > \n> > No need to, https://doc.qt.io/qt-5/qobject.html#dtor.QObject\n> \n> \n> Aha - ok so because it's constructed with 'this' passed in the\n> destruction is linked:\n>         viewfinder_ = new ViewFinder(this);\n\nI've thought about implementing similar for our Object class, but have\nrefrained to do so so far. I may revisit the topic later, depending on\nif it would make the code more robust. Inputs are welcome :-)\n\n> That explains why just cleaning up the QImage leak was enough.\n> \n> I'll stick with V1 then.\n> \n> > Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>\n> > \n> >>>> Signed-off-by: Kieran Bingham <kieran.bingham@ideasonboard.com>\n> >>>> ---\n> >>>>  src/qcam/viewfinder.cpp | 5 +++++\n> >>>>  src/qcam/viewfinder.h   | 1 +\n> >>>>  2 files changed, 6 insertions(+)\n> >>>>\n> >>>> diff --git a/src/qcam/viewfinder.cpp b/src/qcam/viewfinder.cpp\n> >>>> index 224a227ddd5b..98a8ab68e5f6 100644\n> >>>> --- a/src/qcam/viewfinder.cpp\n> >>>> +++ b/src/qcam/viewfinder.cpp\n> >>>> @@ -16,6 +16,11 @@ ViewFinder::ViewFinder(QWidget *parent)\n> >>>>  {\n> >>>>  }\n> >>>>\n> >>>> +ViewFinder::~ViewFinder()\n> >>>> +{\n> >>>> +\tdelete image_;\n> >>>> +}\n> >>>> +\n> >>>>  void ViewFinder::display(const unsigned char *raw, size_t size)\n> >>>>  {\n> >>>>  \tconverter_.convert(raw, size, image_);\n> >>>> diff --git a/src/qcam/viewfinder.h b/src/qcam/viewfinder.h\n> >>>> index c9ca98913e05..33bdb1460f84 100644\n> >>>> --- a/src/qcam/viewfinder.h\n> >>>> +++ b/src/qcam/viewfinder.h\n> >>>> @@ -17,6 +17,7 @@ class ViewFinder : public QLabel\n> >>>>  {\n> >>>>  public:\n> >>>>  \tViewFinder(QWidget *parent);\n> >>>> +\t~ViewFinder();\n> >>>>\n> >>>>  \tint setFormat(unsigned int format, unsigned int width,\n> >>>>  \t\t      unsigned int height);","headers":{"Return-Path":"<laurent.pinchart@ideasonboard.com>","Received":["from perceval.ideasonboard.com (perceval.ideasonboard.com\n\t[IPv6:2001:4b98:dc2:55:216:3eff:fef7:d647])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id 1410562375\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tTue, 24 Sep 2019 14:14:07 +0200 (CEST)","from pendragon.ideasonboard.com\n\t(dfj612yhrgyx302h3jwwy-3.rev.dnainternet.fi\n\t[IPv6:2001:14ba:21f5:5b00:ce28:277f:58d7:3ca4])\n\tby perceval.ideasonboard.com (Postfix) with ESMTPSA id 1691423F;\n\tTue, 24 Sep 2019 14:14:05 +0200 (CEST)"],"DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com;\n\ts=mail; t=1569327246;\n\tbh=AY3/3iX/+L+Ccn02VfkKw1eXsGhFplHOkD63DtSau4Q=;\n\th=Date:From:To:Cc:Subject:References:In-Reply-To:From;\n\tb=ExcxKbzZbARcN8mgR+Gvkr4cfCldtAXA3IjwTZ4PncJhcu7iXQgRy/VeHWSM5cMM6\n\tWO8BdUwv88tI6udkV1rTNbwuHPCumVxu1ItvIemc2vgJUBOEuKW/HgoahVLxJzkXCo\n\tzy6I6qh8KcHEYCq4hLPqgpWR6bs8fWh0eY2w7Vhs=","Date":"Tue, 24 Sep 2019 15:13:56 +0300","From":"Laurent Pinchart <laurent.pinchart@ideasonboard.com>","To":"Kieran Bingham <kieran.bingham@ideasonboard.com>","Cc":"Jacopo Mondi <jacopo@jmondi.org>,\n\tLibCamera Devel <libcamera-devel@lists.libcamera.org>","Message-ID":"<20190924121356.GB4883@pendragon.ideasonboard.com>","References":"<20190923132229.17027-1-kieran.bingham@ideasonboard.com>\n\t<20190924081600.htxxgkxmj4fafseq@uno.localdomain>\n\t<99d96e47-6011-1b7a-0338-1dd496063d30@ideasonboard.com>\n\t<20190924115450.GA4883@pendragon.ideasonboard.com>\n\t<3c3700d9-6e05-f016-436c-ead60e3a9a04@ideasonboard.com>","MIME-Version":"1.0","Content-Type":"text/plain; charset=utf-8","Content-Disposition":"inline","In-Reply-To":"<3c3700d9-6e05-f016-436c-ead60e3a9a04@ideasonboard.com>","User-Agent":"Mutt/1.10.1 (2018-07-13)","Subject":"Re: [libcamera-devel] [PATCH] qcam: Fix ViewFinder memory leak","X-BeenThere":"libcamera-devel@lists.libcamera.org","X-Mailman-Version":"2.1.29","Precedence":"list","List-Id":"<libcamera-devel.lists.libcamera.org>","List-Unsubscribe":"<https://lists.libcamera.org/options/libcamera-devel>,\n\t<mailto:libcamera-devel-request@lists.libcamera.org?subject=unsubscribe>","List-Archive":"<https://lists.libcamera.org/pipermail/libcamera-devel/>","List-Post":"<mailto:libcamera-devel@lists.libcamera.org>","List-Help":"<mailto:libcamera-devel-request@lists.libcamera.org?subject=help>","List-Subscribe":"<https://lists.libcamera.org/listinfo/libcamera-devel>,\n\t<mailto:libcamera-devel-request@lists.libcamera.org?subject=subscribe>","X-List-Received-Date":"Tue, 24 Sep 2019 12:14:07 -0000"}},{"id":2695,"web_url":"https://patchwork.libcamera.org/comment/2695/","msgid":"<20190924154103.vpj55fsw7c6xnsok@uno.localdomain>","date":"2019-09-24T15:41:03","subject":"Re: [libcamera-devel] [PATCH] qcam: Fix ViewFinder memory leak","submitter":{"id":3,"url":"https://patchwork.libcamera.org/api/people/3/","name":"Jacopo Mondi","email":"jacopo@jmondi.org"},"content":"Hi Kieran,\n\nOn Tue, Sep 24, 2019 at 01:00:58PM +0100, Kieran Bingham wrote:\n> Hi Laurent,\n>\n> On 24/09/2019 12:54, Laurent Pinchart wrote:\n> > Hello,\n> >\n> > On Tue, Sep 24, 2019 at 12:51:32PM +0100, Kieran Bingham wrote:\n> >> On 24/09/2019 09:16, Jacopo Mondi wrote:\n> >>> On Mon, Sep 23, 2019 at 02:22:29PM +0100, Kieran Bingham wrote:\n> >>>> When setting the format on the ViewFinder, a new image_ is allocated.\n> >>>> Any change in format deletes the existing allocation, but it is not\n> >>>> cleaned up on shutdown:\n> >>>>\n> >>>> Direct leak of 32 byte(s) in 1 object(s) allocated from:\n> >>>>     #0 0x7f0bf8a7e17f in operator new(unsigned long) (/usr/lib/x86_64-linux-gnu/libasan.so.5+0x10e17f)\n> >>>>     #1 0x564c7205f7b0 in ViewFinder::setFormat(unsigned int, unsigned int, unsigned int) ../src/qcam/viewfinder.cpp:43\n> >>>>     #2 0x564c71fec467 in MainWindow::startCapture() ../src/qcam/main_window.cpp:152\n> >>>>     #3 0x564c71fe6c1a in MainWindow::MainWindow(libcamera::CameraManager*, OptionsParser::Options const&) ../src/qcam/main_window.cpp:40\n> >>>>     #4 0x564c71fdf133 in main ../src/qcam/main.cpp:76\n> >>>>     #5 0x7f0bf5944b6a in __libc_start_main (/lib/x86_64-linux-gnu/libc.so.6+0x26b6a)\n> >>>>\n> >>>> Provide a ViewFinder destructor, and delete the allocation as\n> >>>> appropriate.\n> >>>\n> >>> Good catch, but I don't see where the viewfinder gets destroyed in\n> >>> main_window.cpp. How does the newly added destructor gets called?\n> >>\n> >> Intriguing, the addition of the destructor made the LeakSanitizer\n> >> warning go away, however I believe you are right. There is no explicit\n> >> call to delete the ViewFinder which is created as part of the MainWindow.\n> >>\n> >> I'll add this, and respin a v2.\n> >\n> > No need to, https://doc.qt.io/qt-5/qobject.html#dtor.QObject\n\nWith the trick pointed out by Laurent clarifying my concerns:\nReviewed-by: Jacopo Mondi <jacopo@jmondi.org>\n\nThanks\n  j\n>\n>\n> Aha - ok so because it's constructed with 'this' passed in the\n> destruction is linked:\n>         viewfinder_ = new ViewFinder(this);\n>\n> That explains why just cleaning up the QImage leak was enough.\n>\n> I'll stick with V1 then.\n>\n> Regards\n>\n> Kieran\n>\n>\n> >\n> > Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>\n> >\n> >>>> Signed-off-by: Kieran Bingham <kieran.bingham@ideasonboard.com>\n> >>>> ---\n> >>>>  src/qcam/viewfinder.cpp | 5 +++++\n> >>>>  src/qcam/viewfinder.h   | 1 +\n> >>>>  2 files changed, 6 insertions(+)\n> >>>>\n> >>>> diff --git a/src/qcam/viewfinder.cpp b/src/qcam/viewfinder.cpp\n> >>>> index 224a227ddd5b..98a8ab68e5f6 100644\n> >>>> --- a/src/qcam/viewfinder.cpp\n> >>>> +++ b/src/qcam/viewfinder.cpp\n> >>>> @@ -16,6 +16,11 @@ ViewFinder::ViewFinder(QWidget *parent)\n> >>>>  {\n> >>>>  }\n> >>>>\n> >>>> +ViewFinder::~ViewFinder()\n> >>>> +{\n> >>>> +\tdelete image_;\n> >>>> +}\n> >>>> +\n> >>>>  void ViewFinder::display(const unsigned char *raw, size_t size)\n> >>>>  {\n> >>>>  \tconverter_.convert(raw, size, image_);\n> >>>> diff --git a/src/qcam/viewfinder.h b/src/qcam/viewfinder.h\n> >>>> index c9ca98913e05..33bdb1460f84 100644\n> >>>> --- a/src/qcam/viewfinder.h\n> >>>> +++ b/src/qcam/viewfinder.h\n> >>>> @@ -17,6 +17,7 @@ class ViewFinder : public QLabel\n> >>>>  {\n> >>>>  public:\n> >>>>  \tViewFinder(QWidget *parent);\n> >>>> +\t~ViewFinder();\n> >>>>\n> >>>>  \tint setFormat(unsigned int format, unsigned int width,\n> >>>>  \t\t      unsigned int height);\n> >\n>\n> --\n> Regards\n> --\n> Kieran","headers":{"Return-Path":"<jacopo@jmondi.org>","Received":["from relay7-d.mail.gandi.net (relay7-d.mail.gandi.net\n\t[217.70.183.200])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id 106C162375\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tTue, 24 Sep 2019 17:39:24 +0200 (CEST)","from uno.localdomain\n\t(host89-248-dynamic.45-213-r.retail.telecomitalia.it [213.45.248.89])\n\t(Authenticated sender: jacopo@jmondi.org)\n\tby relay7-d.mail.gandi.net (Postfix) with ESMTPSA id 2B20020011;\n\tTue, 24 Sep 2019 15:39:22 +0000 (UTC)"],"X-Originating-IP":"213.45.248.89","Date":"Tue, 24 Sep 2019 17:41:03 +0200","From":"Jacopo Mondi <jacopo@jmondi.org>","To":"Kieran Bingham <kieran.bingham@ideasonboard.com>","Cc":"Laurent Pinchart <laurent.pinchart@ideasonboard.com>,\n\tLibCamera Devel <libcamera-devel@lists.libcamera.org>","Message-ID":"<20190924154103.vpj55fsw7c6xnsok@uno.localdomain>","References":"<20190923132229.17027-1-kieran.bingham@ideasonboard.com>\n\t<20190924081600.htxxgkxmj4fafseq@uno.localdomain>\n\t<99d96e47-6011-1b7a-0338-1dd496063d30@ideasonboard.com>\n\t<20190924115450.GA4883@pendragon.ideasonboard.com>\n\t<3c3700d9-6e05-f016-436c-ead60e3a9a04@ideasonboard.com>","MIME-Version":"1.0","Content-Type":"multipart/signed; micalg=pgp-sha256;\n\tprotocol=\"application/pgp-signature\"; boundary=\"p26veyjrvr63dvoh\"","Content-Disposition":"inline","In-Reply-To":"<3c3700d9-6e05-f016-436c-ead60e3a9a04@ideasonboard.com>","User-Agent":"NeoMutt/20180716","Subject":"Re: [libcamera-devel] [PATCH] qcam: Fix ViewFinder memory leak","X-BeenThere":"libcamera-devel@lists.libcamera.org","X-Mailman-Version":"2.1.29","Precedence":"list","List-Id":"<libcamera-devel.lists.libcamera.org>","List-Unsubscribe":"<https://lists.libcamera.org/options/libcamera-devel>,\n\t<mailto:libcamera-devel-request@lists.libcamera.org?subject=unsubscribe>","List-Archive":"<https://lists.libcamera.org/pipermail/libcamera-devel/>","List-Post":"<mailto:libcamera-devel@lists.libcamera.org>","List-Help":"<mailto:libcamera-devel-request@lists.libcamera.org?subject=help>","List-Subscribe":"<https://lists.libcamera.org/listinfo/libcamera-devel>,\n\t<mailto:libcamera-devel-request@lists.libcamera.org?subject=subscribe>","X-List-Received-Date":"Tue, 24 Sep 2019 15:39:24 -0000"}},{"id":2696,"web_url":"https://patchwork.libcamera.org/comment/2696/","msgid":"<5ea41e30-8497-ee6b-461b-0541c580ca1e@ideasonboard.com>","date":"2019-09-24T16:36:46","subject":"Re: [libcamera-devel] [PATCH] qcam: Fix ViewFinder memory leak","submitter":{"id":4,"url":"https://patchwork.libcamera.org/api/people/4/","name":"Kieran Bingham","email":"kieran.bingham@ideasonboard.com"},"content":"Hi Jacopo, Laurent,\n\nPushed with your RB tags.\n\n--\nKieran\n\n\nOn 24/09/2019 16:41, Jacopo Mondi wrote:\n> Hi Kieran,\n> \n> On Tue, Sep 24, 2019 at 01:00:58PM +0100, Kieran Bingham wrote:\n>> Hi Laurent,\n>>\n>> On 24/09/2019 12:54, Laurent Pinchart wrote:\n>>> Hello,\n>>>\n>>> On Tue, Sep 24, 2019 at 12:51:32PM +0100, Kieran Bingham wrote:\n>>>> On 24/09/2019 09:16, Jacopo Mondi wrote:\n>>>>> On Mon, Sep 23, 2019 at 02:22:29PM +0100, Kieran Bingham wrote:\n>>>>>> When setting the format on the ViewFinder, a new image_ is allocated.\n>>>>>> Any change in format deletes the existing allocation, but it is not\n>>>>>> cleaned up on shutdown:\n>>>>>>\n>>>>>> Direct leak of 32 byte(s) in 1 object(s) allocated from:\n>>>>>>     #0 0x7f0bf8a7e17f in operator new(unsigned long) (/usr/lib/x86_64-linux-gnu/libasan.so.5+0x10e17f)\n>>>>>>     #1 0x564c7205f7b0 in ViewFinder::setFormat(unsigned int, unsigned int, unsigned int) ../src/qcam/viewfinder.cpp:43\n>>>>>>     #2 0x564c71fec467 in MainWindow::startCapture() ../src/qcam/main_window.cpp:152\n>>>>>>     #3 0x564c71fe6c1a in MainWindow::MainWindow(libcamera::CameraManager*, OptionsParser::Options const&) ../src/qcam/main_window.cpp:40\n>>>>>>     #4 0x564c71fdf133 in main ../src/qcam/main.cpp:76\n>>>>>>     #5 0x7f0bf5944b6a in __libc_start_main (/lib/x86_64-linux-gnu/libc.so.6+0x26b6a)\n>>>>>>\n>>>>>> Provide a ViewFinder destructor, and delete the allocation as\n>>>>>> appropriate.\n>>>>>\n>>>>> Good catch, but I don't see where the viewfinder gets destroyed in\n>>>>> main_window.cpp. How does the newly added destructor gets called?\n>>>>\n>>>> Intriguing, the addition of the destructor made the LeakSanitizer\n>>>> warning go away, however I believe you are right. There is no explicit\n>>>> call to delete the ViewFinder which is created as part of the MainWindow.\n>>>>\n>>>> I'll add this, and respin a v2.\n>>>\n>>> No need to, https://doc.qt.io/qt-5/qobject.html#dtor.QObject\n> \n> With the trick pointed out by Laurent clarifying my concerns:\n> Reviewed-by: Jacopo Mondi <jacopo@jmondi.org>\n> \n> Thanks\n>   j\n>>\n>>\n>> Aha - ok so because it's constructed with 'this' passed in the\n>> destruction is linked:\n>>         viewfinder_ = new ViewFinder(this);\n>>\n>> That explains why just cleaning up the QImage leak was enough.\n>>\n>> I'll stick with V1 then.\n>>\n>> Regards\n>>\n>> Kieran\n>>\n>>\n>>>\n>>> Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>\n>>>\n>>>>>> Signed-off-by: Kieran Bingham <kieran.bingham@ideasonboard.com>\n>>>>>> ---\n>>>>>>  src/qcam/viewfinder.cpp | 5 +++++\n>>>>>>  src/qcam/viewfinder.h   | 1 +\n>>>>>>  2 files changed, 6 insertions(+)\n>>>>>>\n>>>>>> diff --git a/src/qcam/viewfinder.cpp b/src/qcam/viewfinder.cpp\n>>>>>> index 224a227ddd5b..98a8ab68e5f6 100644\n>>>>>> --- a/src/qcam/viewfinder.cpp\n>>>>>> +++ b/src/qcam/viewfinder.cpp\n>>>>>> @@ -16,6 +16,11 @@ ViewFinder::ViewFinder(QWidget *parent)\n>>>>>>  {\n>>>>>>  }\n>>>>>>\n>>>>>> +ViewFinder::~ViewFinder()\n>>>>>> +{\n>>>>>> +\tdelete image_;\n>>>>>> +}\n>>>>>> +\n>>>>>>  void ViewFinder::display(const unsigned char *raw, size_t size)\n>>>>>>  {\n>>>>>>  \tconverter_.convert(raw, size, image_);\n>>>>>> diff --git a/src/qcam/viewfinder.h b/src/qcam/viewfinder.h\n>>>>>> index c9ca98913e05..33bdb1460f84 100644\n>>>>>> --- a/src/qcam/viewfinder.h\n>>>>>> +++ b/src/qcam/viewfinder.h\n>>>>>> @@ -17,6 +17,7 @@ class ViewFinder : public QLabel\n>>>>>>  {\n>>>>>>  public:\n>>>>>>  \tViewFinder(QWidget *parent);\n>>>>>> +\t~ViewFinder();\n>>>>>>\n>>>>>>  \tint setFormat(unsigned int format, unsigned int width,\n>>>>>>  \t\t      unsigned int height);\n>>>\n>>\n>> --\n>> Regards\n>> --\n>> Kieran","headers":{"Return-Path":"<kieran.bingham@ideasonboard.com>","Received":["from perceval.ideasonboard.com (perceval.ideasonboard.com\n\t[IPv6:2001:4b98:dc2:55:216:3eff:fef7:d647])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id 52CE460BF1\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tTue, 24 Sep 2019 18:36:49 +0200 (CEST)","from [192.168.0.20]\n\t(cpc89242-aztw30-2-0-cust488.18-1.cable.virginm.net [86.31.129.233])\n\tby perceval.ideasonboard.com (Postfix) with ESMTPSA id 917D730F;\n\tTue, 24 Sep 2019 18:36:48 +0200 (CEST)"],"DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com;\n\ts=mail; t=1569343008;\n\tbh=dUFqHJBiEYilGUJW1Vd0VUzONAxteTR7QIxaWDeDJqs=;\n\th=Reply-To:Subject:To:Cc:References:From:Date:In-Reply-To:From;\n\tb=d4P+L+y86ECaFydNXNTENY+cFGiw/fPUzq53i+x7t2UOL3IsuBxOI+uqHkzGAhD5A\n\tPLQBsRefqcxJ9UP1hAVyvUVeIMZqqkPHvrHheriZQmgm9jZe3guwOdt440AoZqOpYg\n\tVzY3C8mHmJZj8HDXxWYbJGlTzFDzJy797UtTnSAs=","Reply-To":"kieran.bingham@ideasonboard.com","To":"Jacopo Mondi <jacopo@jmondi.org>","Cc":"Laurent Pinchart <laurent.pinchart@ideasonboard.com>,\n\tLibCamera Devel <libcamera-devel@lists.libcamera.org>","References":"<20190923132229.17027-1-kieran.bingham@ideasonboard.com>\n\t<20190924081600.htxxgkxmj4fafseq@uno.localdomain>\n\t<99d96e47-6011-1b7a-0338-1dd496063d30@ideasonboard.com>\n\t<20190924115450.GA4883@pendragon.ideasonboard.com>\n\t<3c3700d9-6e05-f016-436c-ead60e3a9a04@ideasonboard.com>\n\t<20190924154103.vpj55fsw7c6xnsok@uno.localdomain>","From":"Kieran Bingham <kieran.bingham@ideasonboard.com>","Openpgp":"preference=signencrypt","Autocrypt":"addr=kieran.bingham@ideasonboard.com; keydata=\n\t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","Organization":"Ideas on Board","Message-ID":"<5ea41e30-8497-ee6b-461b-0541c580ca1e@ideasonboard.com>","Date":"Tue, 24 Sep 2019 17:36:46 +0100","User-Agent":"Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101\n\tThunderbird/60.8.0","MIME-Version":"1.0","In-Reply-To":"<20190924154103.vpj55fsw7c6xnsok@uno.localdomain>","Content-Type":"text/plain; charset=utf-8","Content-Language":"en-GB","Content-Transfer-Encoding":"7bit","Subject":"Re: [libcamera-devel] [PATCH] qcam: Fix ViewFinder memory leak","X-BeenThere":"libcamera-devel@lists.libcamera.org","X-Mailman-Version":"2.1.29","Precedence":"list","List-Id":"<libcamera-devel.lists.libcamera.org>","List-Unsubscribe":"<https://lists.libcamera.org/options/libcamera-devel>,\n\t<mailto:libcamera-devel-request@lists.libcamera.org?subject=unsubscribe>","List-Archive":"<https://lists.libcamera.org/pipermail/libcamera-devel/>","List-Post":"<mailto:libcamera-devel@lists.libcamera.org>","List-Help":"<mailto:libcamera-devel-request@lists.libcamera.org?subject=help>","List-Subscribe":"<https://lists.libcamera.org/listinfo/libcamera-devel>,\n\t<mailto:libcamera-devel-request@lists.libcamera.org?subject=subscribe>","X-List-Received-Date":"Tue, 24 Sep 2019 16:36:49 -0000"}}]