git: 89e3d5671ba1 - main - bsnmpclient(3): make it thread-safe

Ryan Libby rlibby at gmail.com
Tue Dec 29 19:05:10 UTC 2020


On Tue, Dec 29, 2020 at 7:01 AM Edward Tomasz Napierala
<trasz at freebsd.org> wrote:
>
> The branch main has been updated by trasz:
>
> URL: https://cgit.FreeBSD.org/src/commit/?id=89e3d5671ba13dceca272d5b159c9bd805f3f504
>
> commit 89e3d5671ba13dceca272d5b159c9bd805f3f504
> Author:     Edward Tomasz Napierala <trasz at FreeBSD.org>
> AuthorDate: 2020-12-29 14:59:31 +0000
> Commit:     Edward Tomasz Napierala <trasz at FreeBSD.org>
> CommitDate: 2020-12-29 14:59:37 +0000
>
>     bsnmpclient(3): make it thread-safe
>
>     Reviewed By:    harti
>     Sponsored by:   NetApp, Inc.
>     Sponsored by:   Klara, Inc.
>     Differential Revision: https://reviews.freebsd.org/D27336
> ---
>  contrib/bsnmp/lib/asn1.c       | 2 +-
>  contrib/bsnmp/lib/snmpclient.c | 4 ++--
>  contrib/bsnmp/lib/snmpclient.h | 2 +-
>  3 files changed, 4 insertions(+), 4 deletions(-)
>
> diff --git a/contrib/bsnmp/lib/asn1.c b/contrib/bsnmp/lib/asn1.c
> index f1f9267c0226..a03dac70c529 100644
> --- a/contrib/bsnmp/lib/asn1.c
> +++ b/contrib/bsnmp/lib/asn1.c
> @@ -1019,7 +1019,7 @@ asn_oid2str_r(const struct asn_oid *oid, char *buf)
>  char *
>  asn_oid2str(const struct asn_oid *oid)
>  {
> -       static char str[ASN_OIDSTRLEN];
> +       __thread static char str[ASN_OIDSTRLEN];

gcc does not accept this spelling.  It insists on `static __thread`
instead.

--- asn1.o ---
/usr/src/freebsd/contrib/bsnmp/lib/asn1.c: In function 'asn_oid2str':
/usr/src/freebsd/contrib/bsnmp/lib/asn1.c:1022:2: error: '__thread'
before 'static'
 1022 |  __thread static char str[ASN_OIDSTRLEN];
      |  ^~~~~~~~

https://gcc.gnu.org/onlinedocs/gcc/Thread-Local.html

>
>         return (asn_oid2str_r(oid, str));
>  }
> diff --git a/contrib/bsnmp/lib/snmpclient.c b/contrib/bsnmp/lib/snmpclient.c
> index c22d8e125a14..e49105918416 100644
> --- a/contrib/bsnmp/lib/snmpclient.c
> +++ b/contrib/bsnmp/lib/snmpclient.c
> @@ -71,7 +71,7 @@
>  #define        DEBUG_PARSE     0
>
>  /* global context */
> -struct snmp_client snmp_client;
> +__thread struct snmp_client snmp_client;
>
>  /* List of all outstanding requests */
>  struct sent_pdu {
> @@ -86,7 +86,7 @@ struct sent_pdu {
>  };
>  LIST_HEAD(sent_pdu_list, sent_pdu);
>
> -static struct sent_pdu_list sent_pdus;
> +__thread static struct sent_pdu_list sent_pdus;

Same here.

>
>  /*
>   * Prototype table entry. All C-structure produced by the table function must
> diff --git a/contrib/bsnmp/lib/snmpclient.h b/contrib/bsnmp/lib/snmpclient.h
> index a19bdb2ea653..1bc3780de038 100644
> --- a/contrib/bsnmp/lib/snmpclient.h
> +++ b/contrib/bsnmp/lib/snmpclient.h
> @@ -114,7 +114,7 @@ struct snmp_client {
>  };
>
>  /* the global context */
> -extern struct snmp_client snmp_client;
> +extern __thread struct snmp_client snmp_client;
>
>  /* initizialies a snmp_client structure */
>  void snmp_client_init(struct snmp_client *);


More information about the dev-commits-src-all mailing list