Re: [PATCH]: hathread little debug feature proposal

2019-06-28 Thread David CARLIER
do not know if this is the trend here but ... ping :-)

On Fri, 14 Jun 2019 at 12:07, Willy Tarreau  wrote:
>
> Hi David,
>
> On Fri, Jun 14, 2019 at 10:04:41AM +, David CARLIER wrote:
> > Hi,
> >
> > Here a little patch proposal to give names to threads for debug builds.
> > If accepted it is not crucial can be seen after the soon 2.0 release.
>
> I didn't know about this feature. Given that it's only for debugging,
> I suggest we take it later. I'd rather avoid the usual last minute
> change that manages to unexpectedly break monitoring scripts or anything
> but I agree it can be quite useful during debugging.
>
> Thanks,
> Willy



Re: [PATCH]: hathread little debug feature proposal

2019-06-14 Thread Willy Tarreau
Hi David,

On Fri, Jun 14, 2019 at 10:04:41AM +, David CARLIER wrote:
> Hi,
> 
> Here a little patch proposal to give names to threads for debug builds.
> If accepted it is not crucial can be seen after the soon 2.0 release.

I didn't know about this feature. Given that it's only for debugging,
I suggest we take it later. I'd rather avoid the usual last minute
change that manages to unexpectedly break monitoring scripts or anything
but I agree it can be quite useful during debugging.

Thanks,
Willy



[PATCH]: hathread little debug feature proposal

2019-06-14 Thread David CARLIER
Hi,

Here a little patch proposal to give names to threads for debug builds.
If accepted it is not crucial can be seen after the soon 2.0 release.

Thanks.

Kind regards.
From 6b1e5d77e0ef8c29673a5da4b22978c052394a9c Mon Sep 17 00:00:00 2001
From: David Carlier 
Date: Fri, 14 Jun 2019 10:00:06 +
Subject: [PATCH] BUILD/MINOR: hathread

For full debug builds, giving names to threads, for Linux and
FreeBSD.
---
 include/common/hathreads.h |  3 +++
 src/haproxy.c  |  4 +++-
 src/hathreads.c| 15 +++
 3 files changed, 21 insertions(+), 1 deletion(-)

diff --git a/include/common/hathreads.h b/include/common/hathreads.h
index a7c8dc93..d9e757f9 100644
--- a/include/common/hathreads.h
+++ b/include/common/hathreads.h
@@ -189,6 +189,8 @@ static inline void ha_tkillall(int sig)
 	raise(sig);
 }
 
+static inline void ha_tname(unsigned int);
+
 static inline void __ha_barrier_atomic_load(void)
 {
 }
@@ -425,6 +427,7 @@ void thread_release();
 void thread_sync_release();
 void ha_tkill(unsigned int thr, int sig);
 void ha_tkillall(int sig);
+void ha_tname(unsigned int thr);
 
 extern struct thread_info {
 	pthread_t pthread;
diff --git a/src/haproxy.c b/src/haproxy.c
index 9821765a..95a0efe2 100644
--- a/src/haproxy.c
+++ b/src/haproxy.c
@@ -3270,8 +3270,10 @@ int main(int argc, char **argv)
 
 		/* Create nbthread-1 thread. The first thread is the current process */
 		thread_info[0].pthread = pthread_self();
-		for (i = 1; i < global.nbthread; i++)
+		for (i = 1; i < global.nbthread; i++) {
 			pthread_create(_info[i].pthread, NULL, _thread_poll_loop, (void *)(long)i);
+			ha_tname(i);
+		}
 
 #ifdef USE_CPU_AFFINITY
 		/* Now the CPU affinity for all threads */
diff --git a/src/hathreads.c b/src/hathreads.c
index 69385236..100f2271 100644
--- a/src/hathreads.c
+++ b/src/hathreads.c
@@ -21,6 +21,7 @@
 
 #ifdef __FreeBSD__
 #include 
+#include 
 #endif
 
 #include 
@@ -154,6 +155,20 @@ void ha_tkillall(int sig)
 	raise(sig);
 }
 
+void ha_tname(unsigned int thr)
+{
+#if defined(DEBUG_FULL) && (defined(__linux__) || defined(__FreeBSD__))
+	char buf[16] = {0};
+	snprintf(buf, sizeof(buf), "haproxy%u", thr);
+	buf[sizeof(buf)-1] = 0;
+#if defined(__linux__)
+	pthread_setname_np(thread_info[thr].pthread, buf);
+#elif defined(__FreeBSD__)
+	pthread_set_name_np(thread_info[thr].pthread, buf);
+#endif
+#endif
+}
+
 /* these calls are used as callbacks at init time */
 void ha_spin_init(HA_SPINLOCK_T *l)
 {
-- 
2.21.0