From: "softworkz ." <softworkz-at-hotmail.com@ffmpeg.org>
To: FFmpeg development discussions and patches <ffmpeg-devel@ffmpeg.org>
Subject: Re: [FFmpeg-devel] [PATCH v2] w32pthreads: add support for setting thread name
Date: Mon, 31 Mar 2025 00:50:34 +0000
Message-ID: <DM8P223MB0365E9B7FDFCB4422CEEFBA3BAAD2@DM8P223MB0365.NAMP223.PROD.OUTLOOK.COM> (raw)
In-Reply-To: <CAEu79SbXSnwu0=d4xnpZOD22Ygxnob22NaHmr1QM10qNBowkAA@mail.gmail.com>
> -----Original Message-----
> From: ffmpeg-devel <ffmpeg-devel-bounces@ffmpeg.org> On Behalf Of Jan
> Ekström
> Sent: Montag, 31. März 2025 00:05
> To: FFmpeg development discussions and patches <ffmpeg-devel@ffmpeg.org>
> Subject: Re: [FFmpeg-devel] [PATCH v2] w32pthreads: add support for
> setting thread name
>
> On Tue, Mar 4, 2025 at 5:14 PM Kacper Michajłow <kasper93@gmail.com>
> wrote:
> >
> > Signed-off-by: Kacper Michajłow <kasper93@gmail.com>
> > ---
> > compat/w32pthreads.h | 30 ++++++++++++++++++++++++++++++
> > libavutil/thread.h | 2 ++
> > 2 files changed, 32 insertions(+)
> >
> > diff --git a/compat/w32pthreads.h b/compat/w32pthreads.h
> > index fd6428e29f..8d5b4729fa 100644
> > --- a/compat/w32pthreads.h
> > +++ b/compat/w32pthreads.h
> > @@ -44,6 +44,7 @@
> > #include "libavutil/internal.h"
> > #include "libavutil/mem.h"
> > #include "libavutil/time.h"
> > +#include "libavutil/wchar_filename.h"
> >
> > typedef struct pthread_t {
> > void *handle;
> > @@ -209,4 +210,33 @@ static inline int pthread_setcancelstate(int
> state, int *oldstate)
> > return 0;
> > }
> >
> > +static inline int win32_thread_setname(const char *name)
> > +{
> > + typedef HRESULT (WINAPI *SetThreadDescriptionFn)(HANDLE, PCWSTR);
> > + SetThreadDescriptionFn pSetThreadDescription;
> > + HRESULT hr;
> > + wchar_t *wname;
> > +
> > +#if !HAVE_UWP
> > + HMODULE kernel32 = GetModuleHandleW(L"kernel32.dll");
> > + if (!kernel32)
> > + return AVERROR(ENOSYS);
> > + pSetThreadDescription = (SetThreadDescriptionFn)
> > + GetProcAddress(kernel32, "SetThreadDescription");
> > + if (!pSetThreadDescription)
> > + return AVERROR(ENOSYS);
> > +#else
> > + WINBASEAPI HRESULT WINAPI
> > + SetThreadDescription(HANDLE hThread, PCWSTR lpThreadDescription);
> > + pSetThreadDescription = &SetThreadDescription;
> > +#endif
> > +
> > + if (utf8towchar(name, &wname) < 0)
> > + return AVERROR(ENOMEM);
> > +
> > + hr = pSetThreadDescription(GetCurrentThread(), wname);
> > + av_free(wname);
> > + return SUCCEEDED(hr) ? 0 : AVERROR(EINVAL);
> > +}
> > +
>
> I can only comment on the non-UWP side of things, but in general the
> code seems fine. I guess this function definition has not been in
> mingw-w64 etc for long enough to hope it would always be there and
> thus we need to define it (similar to pf_DXGIGetDebugInterface)?
>
> The only question mark that is left is whether this functionality is
> actually in kernel32 or kernelbase. When I first saw
> https://stackoverflow.com/questions/62243162/how-to-access-
> setthreaddescription-in-windows-2016-server-version-1607
> I more or less thought of it as a possibly fluke or so, but then
> apparently mingw-w64 went for kernelbase as well in winpthreads?
> https://sourceforge.net/p/mingw-w64/mailman/message/58829419/
>
> What it seems like is that kernel32 works for (at the very least) 20+
> versions of win10+, and older stuff such as the still-supported server
> 2016 requires direct usage of kernelbase?
>
> Jan
> _______________________________________________
Hi Jan,
the actual implementation is (and has always been) in kernelbase.dll.
It was introduced there with Windows SDK 10.0.14393 (Windows OS 1607).
At some point between SDKs 14393 and 18362 (don't have the in-betweens installed), a forwarding export had been added to kernel32.dll (try: dumpbin /exports c:\windows\system32\kernel32.dll | findstr SetThreadDescription).
So, using kernelbase.dll will cover more Windows versions than with kernel32.dll.
sw
_______________________________________________
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".
prev parent reply other threads:[~2025-03-31 0:50 UTC|newest]
Thread overview: 3+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-03-04 15:04 Kacper Michajłow
2025-03-30 22:04 ` Jan Ekström
2025-03-31 0:50 ` softworkz . [this message]
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=DM8P223MB0365E9B7FDFCB4422CEEFBA3BAAD2@DM8P223MB0365.NAMP223.PROD.OUTLOOK.COM \
--to=softworkz-at-hotmail.com@ffmpeg.org \
--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