* [FFmpeg-devel] [PATCH] w32pthreads: add support for setting thread name
@ 2025-03-04 12:52 Kacper Michajłow
2025-03-04 14:50 ` James Almer
0 siblings, 1 reply; 4+ messages in thread
From: Kacper Michajłow @ 2025-03-04 12:52 UTC (permalink / raw)
To: ffmpeg-devel; +Cc: Kacper Michajłow
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..83b4819205 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 ENOSYS;
+ pSetThreadDescription = (SetThreadDescriptionFn)
+ GetProcAddress(kernel32, "SetThreadDescription");
+ if (!pSetThreadDescription)
+ return ENOSYS;
+#else
+ WINBASEAPI HRESULT WINAPI
+ SetThreadDescription(HANDLE hThread, PCWSTR lpThreadDescription);
+ pSetThreadDescription = &SetThreadDescription;
+#endif
+
+ if (utf8towchar(name, &wname) < 0)
+ return ENOMEM;
+
+ hr = pSetThreadDescription(GetCurrentThread(), wname);
+ av_free(wname);
+ return SUCCEEDED(hr) ? 0 : EINVAL;
+}
+
#endif /* COMPAT_W32PTHREADS_H */
diff --git a/libavutil/thread.h b/libavutil/thread.h
index 2c00c7cc35..d1a36a6772 100644
--- a/libavutil/thread.h
+++ b/libavutil/thread.h
@@ -229,6 +229,8 @@ static inline int ff_thread_setname(const char *name)
#endif
#elif HAVE_PTHREAD_SET_NAME_NP
pthread_set_name_np(pthread_self(), name);
+#elif HAVE_W32THREADS
+ ret = AVERROR(win32_thread_setname(name));
#else
ret = AVERROR(ENOSYS);
#endif
--
2.45.1
_______________________________________________
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".
^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: [FFmpeg-devel] [PATCH] w32pthreads: add support for setting thread name
2025-03-04 12:52 [FFmpeg-devel] [PATCH] w32pthreads: add support for setting thread name Kacper Michajłow
@ 2025-03-04 14:50 ` James Almer
2025-03-04 14:57 ` Kacper Michajlow
0 siblings, 1 reply; 4+ messages in thread
From: James Almer @ 2025-03-04 14:50 UTC (permalink / raw)
To: ffmpeg-devel
[-- Attachment #1.1.1: Type: text/plain, Size: 2323 bytes --]
On 3/4/2025 9:52 AM, Kacper Michajłow 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..83b4819205 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 ENOSYS;
> + pSetThreadDescription = (SetThreadDescriptionFn)
> + GetProcAddress(kernel32, "SetThreadDescription");
> + if (!pSetThreadDescription)
> + return ENOSYS;
> +#else
> + WINBASEAPI HRESULT WINAPI
> + SetThreadDescription(HANDLE hThread, PCWSTR lpThreadDescription);
> + pSetThreadDescription = &SetThreadDescription;
> +#endif
> +
> + if (utf8towchar(name, &wname) < 0)
> + return ENOMEM;
> +
> + hr = pSetThreadDescription(GetCurrentThread(), wname);
> + av_free(wname);
> + return SUCCEEDED(hr) ? 0 : EINVAL;
> +}
> +
> #endif /* COMPAT_W32PTHREADS_H */
> diff --git a/libavutil/thread.h b/libavutil/thread.h
> index 2c00c7cc35..d1a36a6772 100644
> --- a/libavutil/thread.h
> +++ b/libavutil/thread.h
> @@ -229,6 +229,8 @@ static inline int ff_thread_setname(const char *name)
> #endif
> #elif HAVE_PTHREAD_SET_NAME_NP
> pthread_set_name_np(pthread_self(), name);
> +#elif HAVE_W32THREADS
> + ret = AVERROR(win32_thread_setname(name));
AVERROR(0) is probably not a good idea, so negate the codes in
win32_thread_setname() directly.
> #else
> ret = AVERROR(ENOSYS);
> #endif
[-- Attachment #1.2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 495 bytes --]
[-- Attachment #2: Type: text/plain, Size: 251 bytes --]
_______________________________________________
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".
^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: [FFmpeg-devel] [PATCH] w32pthreads: add support for setting thread name
2025-03-04 14:50 ` James Almer
@ 2025-03-04 14:57 ` Kacper Michajlow
2025-03-04 15:07 ` Kacper Michajlow
0 siblings, 1 reply; 4+ messages in thread
From: Kacper Michajlow @ 2025-03-04 14:57 UTC (permalink / raw)
To: FFmpeg development discussions and patches
On Tue, 4 Mar 2025 at 15:50, James Almer <jamrial@gmail.com> wrote:
>
> On 3/4/2025 9:52 AM, Kacper Michajłow 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..83b4819205 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 ENOSYS;
> > + pSetThreadDescription = (SetThreadDescriptionFn)
> > + GetProcAddress(kernel32, "SetThreadDescription");
> > + if (!pSetThreadDescription)
> > + return ENOSYS;
> > +#else
> > + WINBASEAPI HRESULT WINAPI
> > + SetThreadDescription(HANDLE hThread, PCWSTR lpThreadDescription);
> > + pSetThreadDescription = &SetThreadDescription;
> > +#endif
> > +
> > + if (utf8towchar(name, &wname) < 0)
> > + return ENOMEM;
> > +
> > + hr = pSetThreadDescription(GetCurrentThread(), wname);
> > + av_free(wname);
> > + return SUCCEEDED(hr) ? 0 : EINVAL;
> > +}
> > +
> > #endif /* COMPAT_W32PTHREADS_H */
> > diff --git a/libavutil/thread.h b/libavutil/thread.h
> > index 2c00c7cc35..d1a36a6772 100644
> > --- a/libavutil/thread.h
> > +++ b/libavutil/thread.h
> > @@ -229,6 +229,8 @@ static inline int ff_thread_setname(const char *name)
> > #endif
> > #elif HAVE_PTHREAD_SET_NAME_NP
> > pthread_set_name_np(pthread_self(), name);
> > +#elif HAVE_W32THREADS
> > + ret = AVERROR(win32_thread_setname(name));
>
> AVERROR(0) is probably not a good idea, so negate the codes in
> win32_thread_setname() directly.
Hmm, I can, but this is following the current pattern. All
`pthread_setname_np` calls above will return 0 on success and are
wrapped by AVERROR.
_______________________________________________
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".
^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: [FFmpeg-devel] [PATCH] w32pthreads: add support for setting thread name
2025-03-04 14:57 ` Kacper Michajlow
@ 2025-03-04 15:07 ` Kacper Michajlow
0 siblings, 0 replies; 4+ messages in thread
From: Kacper Michajlow @ 2025-03-04 15:07 UTC (permalink / raw)
To: FFmpeg development discussions and patches
On Tue, 4 Mar 2025 at 15:57, Kacper Michajlow <kasper93@gmail.com> wrote:
>
> On Tue, 4 Mar 2025 at 15:50, James Almer <jamrial@gmail.com> wrote:
> >
> > On 3/4/2025 9:52 AM, Kacper Michajłow 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..83b4819205 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 ENOSYS;
> > > + pSetThreadDescription = (SetThreadDescriptionFn)
> > > + GetProcAddress(kernel32, "SetThreadDescription");
> > > + if (!pSetThreadDescription)
> > > + return ENOSYS;
> > > +#else
> > > + WINBASEAPI HRESULT WINAPI
> > > + SetThreadDescription(HANDLE hThread, PCWSTR lpThreadDescription);
> > > + pSetThreadDescription = &SetThreadDescription;
> > > +#endif
> > > +
> > > + if (utf8towchar(name, &wname) < 0)
> > > + return ENOMEM;
> > > +
> > > + hr = pSetThreadDescription(GetCurrentThread(), wname);
> > > + av_free(wname);
> > > + return SUCCEEDED(hr) ? 0 : EINVAL;
> > > +}
> > > +
> > > #endif /* COMPAT_W32PTHREADS_H */
> > > diff --git a/libavutil/thread.h b/libavutil/thread.h
> > > index 2c00c7cc35..d1a36a6772 100644
> > > --- a/libavutil/thread.h
> > > +++ b/libavutil/thread.h
> > > @@ -229,6 +229,8 @@ static inline int ff_thread_setname(const char *name)
> > > #endif
> > > #elif HAVE_PTHREAD_SET_NAME_NP
> > > pthread_set_name_np(pthread_self(), name);
> > > +#elif HAVE_W32THREADS
> > > + ret = AVERROR(win32_thread_setname(name));
> >
> > AVERROR(0) is probably not a good idea, so negate the codes in
> > win32_thread_setname() directly.
>
> Hmm, I can, but this is following the current pattern. All
> `pthread_setname_np` calls above will return 0 on success and are
> wrapped by AVERROR.
I've sent v2 with suggested change.
- Kacper
_______________________________________________
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".
^ permalink raw reply [flat|nested] 4+ messages in thread
end of thread, other threads:[~2025-03-04 15:07 UTC | newest]
Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2025-03-04 12:52 [FFmpeg-devel] [PATCH] w32pthreads: add support for setting thread name Kacper Michajłow
2025-03-04 14:50 ` James Almer
2025-03-04 14:57 ` Kacper Michajlow
2025-03-04 15:07 ` Kacper Michajlow
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