diff mbox series

[ovs-dev,v4] util: fix an issue that thread name cannot be set

Message ID 202304171454279913301@chinatelecom.cn
State Superseded
Headers show
Series [ovs-dev,v4] util: fix an issue that thread name cannot be set | expand

Checks

Context Check Description
ovsrobot/apply-robot success apply and check: success
ovsrobot/github-robot-_Build_and_Test success github build: passed
ovsrobot/intel-ovs-compilation success test: success

Commit Message

Songtao Zhan April 17, 2023, 6:54 a.m. UTC
To: dev@openvswitch.org,
    i.maximets@ovn.org

The name of the current thread consists of a name with a maximum
length of 16 bytes and a thread ID. The final name may be longer
than 16 bytes. If the name is longer than 16 bytes, the thread
name will fail to be set

Signed-off-by: Songtao Zhan <zhanst1@chinatelecom.cn>
---
 lib/util.c | 7 +++++++
 1 file changed, 7 insertions(+)

Comments

Eelco Chaudron April 17, 2023, 11:43 a.m. UTC | #1
On 17 Apr 2023, at 8:54, Songtao Zhan wrote:

> To: dev@openvswitch.org,
>     i.maximets@ovn.org
>
> The name of the current thread consists of a name with a maximum
> length of 16 bytes and a thread ID. The final name may be longer
> than 16 bytes. If the name is longer than 16 bytes, the thread
> name will fail to be set

Some inline comments below.

Cheers,

Eelco

> Signed-off-by: Songtao Zhan <zhanst1@chinatelecom.cn>
> ---
>  lib/util.c | 7 +++++++
>  1 file changed, 7 insertions(+)
>
> diff --git a/lib/util.c b/lib/util.c
> index 96a71550d..60a1e56a2 100644
> --- a/lib/util.c
> +++ b/lib/util.c
> @@ -645,6 +645,13 @@ set_subprogram_name(const char *subprogram_name)
>      free(subprogram_name_set(pname));
>
>  #if HAVE_GLIBC_PTHREAD_SETNAME_NP
> +    /* The maximum thead name including '\0' supported is 16.
> +     * add '>' at 0th position to highlight that the name was truncated. */
> +    if (strlen(pname) > 15) {
> +        memcpy(pname, &pname[strlen(pname) - 15], 15);

I think you need to use memmove() as srd/dst can overlap.

> +        pname[15] = '\0';

If you make the memmove + 1, i.e. memmove(pname, &pname[strlen(pname) - 15], 15 + 1);, you can skip the above line.

> +        pname[0] = '>';
> +    }
>      pthread_setname_np(pthread_self(), pname);
>  #elif HAVE_NETBSD_PTHREAD_SETNAME_NP
>      pthread_setname_np(pthread_self(), "%s", pname);
> -- 
> 2.39.1
>
>
>
> zhanst1@chinatelecom.cn
> _______________________________________________
> dev mailing list
> dev@openvswitch.org
> https://mail.openvswitch.org/mailman/listinfo/ovs-dev
diff mbox series

Patch

diff --git a/lib/util.c b/lib/util.c
index 96a71550d..60a1e56a2 100644
--- a/lib/util.c
+++ b/lib/util.c
@@ -645,6 +645,13 @@  set_subprogram_name(const char *subprogram_name)
     free(subprogram_name_set(pname));

 #if HAVE_GLIBC_PTHREAD_SETNAME_NP
+    /* The maximum thead name including '\0' supported is 16.
+     * add '>' at 0th position to highlight that the name was truncated. */
+    if (strlen(pname) > 15) {
+        memcpy(pname, &pname[strlen(pname) - 15], 15);
+        pname[15] = '\0';
+        pname[0] = '>';
+    }
     pthread_setname_np(pthread_self(), pname);
 #elif HAVE_NETBSD_PTHREAD_SETNAME_NP
     pthread_setname_np(pthread_self(), "%s", pname);