diff --git a/winsup/cygwin/cygthread.cc b/winsup/cygwin/cygthread.cc
index 4404e4a19..66a317934 100644
--- a/winsup/cygwin/cygthread.cc
+++ b/winsup/cygwin/cygthread.cc
@@ -87,6 +87,7 @@ cygthread::stub (VOID *arg)
 #endif
       else
 	{
+	  SetThreadName (info->id, info->__name);
 	  info->callfunc (false);
 
 	  HANDLE notify = info->notify_detached;
@@ -128,6 +129,7 @@ cygthread::simplestub (VOID *arg)
   _my_tls._ctinfo = info;
   info->stack_ptr = &arg;
   HANDLE notify = info->notify_detached;
+  SetThreadName (info->id, info->__name);
   info->callfunc (true);
   if (notify)
      SetEvent (notify);
@@ -213,8 +215,6 @@ cygthread::create ()
 			    this, 0, &id);
       if (!htobe)
 	api_fatal ("CreateThread failed for %s - %p<%y>, %E", __name, h, id);
-      else
-	SetThreadName (GetThreadId (htobe), __name);
       thread_printf ("created name '%s', thread %p, id %y", __name, h, id);
 #ifdef DEBUGGING
       terminated = false;
diff --git a/winsup/cygwin/release/2.12.0 b/winsup/cygwin/release/2.12.0
index af74b099e..c847b91c0 100644
--- a/winsup/cygwin/release/2.12.0
+++ b/winsup/cygwin/release/2.12.0
@@ -77,3 +77,5 @@ Bug Fixes
 
 - Fix WEOF handling in wctype functions.
   Addresses: https://cygwin.com/ml/cygwin/2018-12/msg00173.html
+
+- Fix thread names in GDB when cygthreads get reused.