aboutsummaryrefslogtreecommitdiff
path: root/nametoaddr.c
diff options
context:
space:
mode:
authorGuy Harris <gharris@sonic.net>2023-05-05 04:32:51 -0700
committerGuy Harris <gharris@sonic.net>2023-05-05 15:07:11 -0700
commitb10eefd47f979a339aaeb247bf47cc333aa7ba91 (patch)
treec32b76c498a7bd4f8a7c2385e36161f229ecd475 /nametoaddr.c
parent3d9930b78ff77629d52129bedeceba12a2fe2088 (diff)
Make some static variables thread-local.
This should make some functions thread-safe, even if it doesn't make them fully-reentrant; at least some of them would requiree API changes to full reentrancy. This should fix #1174.
Diffstat (limited to 'nametoaddr.c')
-rw-r--r--nametoaddr.c12
1 files changed, 8 insertions, 4 deletions
diff --git a/nametoaddr.c b/nametoaddr.c
index a746cb6d..6f1dafe9 100644
--- a/nametoaddr.c
+++ b/nametoaddr.c
@@ -135,6 +135,8 @@
#include <pcap/namedb.h>
#include "nametoaddr.h"
+#include "thread-local.h"
+
#ifdef HAVE_OS_PROTO_H
#include "os-proto.h"
#endif
@@ -806,16 +808,18 @@ pcap_ether_aton(const char *s)
#ifndef HAVE_ETHER_HOSTTON
/*
* Roll our own.
- * XXX - not thread-safe, because pcap_next_etherent() isn't thread-
- * safe! Needs a mutex or a thread-safe pcap_next_etherent().
+ *
+ * This should be thread-safe, as we define the static variables
+ * we use to be thread-local, and as pcap_next_etherent() does so
+ * as well.
*/
u_char *
pcap_ether_hostton(const char *name)
{
register struct pcap_etherent *ep;
register u_char *ap;
- static FILE *fp = NULL;
- static int init = 0;
+ static thread_local FILE *fp = NULL;
+ static thread_local int init = 0;
if (!init) {
fp = fopen(PCAP_ETHERS_FILE, "r");