From: "Martin Storsjö" <martin@martin.st>
To: FFmpeg development discussions and patches <ffmpeg-devel@ffmpeg.org>
Subject: Re: [FFmpeg-devel] av_fopen_utf8 and cross-DLL CRT object sharing issue on Windows
Date: Sun, 8 May 2022 23:11:47 +0300 (EEST)
Message-ID: <bfb9b857-6eba-4acb-e36a-dd55cb57bb4c@martin.st> (raw)
In-Reply-To: <DM8P223MB03656211062575A5D7E38A1EBAC49@DM8P223MB0365.NAMP223.PROD.OUTLOOK.COM>
On Sat, 7 May 2022, Soft Works wrote:
>> -----Original Message-----
>> From: ffmpeg-devel <ffmpeg-devel-bounces@ffmpeg.org> On Behalf Of
>> Andreas Rheinhardt
>> Sent: Saturday, May 7, 2022 6:32 AM
>> To: ffmpeg-devel@ffmpeg.org
>> Subject: Re: [FFmpeg-devel] av_fopen_utf8 and cross-DLL CRT object
>> sharing issue on Windows
>>
>> Soft Works:
>>>
>>>
>>>> -----Original Message-----
>>>
>>> I don't have experience with that kind of setup, but I would have
>>> thought that with separate CRTs, you could already get into trouble
>>> when you would allocate a string in the main application which
>>> you pass to any of the DLL's APIs and which might get freed by
>>> the DLL at a later time - doesn't that fail?
>>>
>>
>> Whenever any of the FFmpeg libraries takes ownership of a string or
>> another buffer*, we require it to be freeable with av_free (typically
>> by
>> saying that it needs to be allocated with the av_malloc family of
>> functions). So all allocs and frees have to happen in libavutil. This
>> is
>> also true for all the other allocations directly performed by the the
>> FFmpeg libraries.
>> (The only exceptions to this are AVBuffer(Ref)s which allow users to
>> use
>> custom allocators and destructors.)
>
> Ah yes of course, thanks for the explanation. I still wonder whether
> there aren't any other issues when multiple CRTs are being used?
>
> Or are the file IO APIs the only "weak" point with regards to
> multiple CRTs being used?
In the case of ffmpeg, yes.
For generic library design, you'd have an issue anywhere where you pass
CRT resources around - file descriptors from open, FILE*, and indeed as
you mentioned - allocating and freeing memory with malloc/free in
different DLLs. But as long as the library design is such that you don't
hand over ownership of allocations and don't pass such objects across DLL
boundaries, there's no issue.
// Martin
_______________________________________________
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
https://ffmpeg.org/mailman/listinfo/ffmpeg-devel
To unsubscribe, visit link above, or email
ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe".
next prev parent reply other threads:[~2022-05-08 20:11 UTC|newest]
Thread overview: 14+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-04-20 12:47 Martin Storsjö
2022-05-07 4:22 ` Soft Works
2022-05-07 4:32 ` Andreas Rheinhardt
2022-05-07 5:02 ` Soft Works
2022-05-08 20:11 ` Martin Storsjö [this message]
2022-05-09 0:30 ` Soft Works
2022-05-09 9:41 ` Martin Storsjö
2022-05-09 10:38 ` Soft Works
2022-05-09 10:47 ` Martin Storsjö
2022-05-09 10:53 ` Soft Works
2022-05-08 20:01 ` Martin Storsjö
2022-05-09 0:28 ` Soft Works
2022-05-09 9:36 ` Martin Storsjö
2022-05-09 10:59 ` Soft Works
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=bfb9b857-6eba-4acb-e36a-dd55cb57bb4c@martin.st \
--to=martin@martin.st \
--cc=ffmpeg-devel@ffmpeg.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Git Inbox Mirror of the ffmpeg-devel mailing list - see https://ffmpeg.org/mailman/listinfo/ffmpeg-devel
This inbox may be cloned and mirrored by anyone:
git clone --mirror https://master.gitmailbox.com/ffmpegdev/0 ffmpegdev/git/0.git
# If you have public-inbox 1.1+ installed, you may
# initialize and index your mirror using the following commands:
public-inbox-init -V2 ffmpegdev ffmpegdev/ https://master.gitmailbox.com/ffmpegdev \
ffmpegdev@gitmailbox.com
public-inbox-index ffmpegdev
Example config snippet for mirrors.
AGPL code for this site: git clone https://public-inbox.org/public-inbox.git