From a1917ee6873839e124b2e22603368db9ef30808f Mon Sep 17 00:00:00 2001
From: Marc Alff <marc.alff@sun.com>
Date: Tue, 26 Jan 2010 16:42:54 -0700
Subject: [PATCH] Bug#44210 Performance schema: pool-of-threads threads
 instrumentation is missing

WL#5136 Pool of threads

Added an explicit delete_thread() API in the instrumentation,
to be used by the pool of threads implementations.
---
 include/mysql/psi/psi.h           | 7 ++++++-
 include/mysql/psi/psi_abi_v1.h.pp | 2 ++
 storage/perfschema/pfs.cc         | 8 ++++++++
 3 files changed, 16 insertions(+), 1 deletion(-)

diff --git a/include/mysql/psi/psi.h b/include/mysql/psi/psi.h
index a9277cd18bd..51446fa83a5 100644
--- a/include/mysql/psi/psi.h
+++ b/include/mysql/psi/psi.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2008-2009 Sun Microsystems, Inc
+/* Copyright (C) 2008-2010 Sun Microsystems, Inc
 
   This program is free software; you can redistribute it and/or modify
   it under the terms of the GNU General Public License as published by
@@ -614,6 +614,9 @@ typedef void (*set_thread_v1_t)(struct PSI_thread *thread);
 /** Delete the current thread instrumentation. */
 typedef void (*delete_current_thread_v1_t)(void);
 
+/** Delete a thread instrumentation. */
+typedef void (*delete_thread_v1_t)(struct PSI_thread *thread);
+
 /**
   Get a mutex instrumentation locker.
   @param mutex the instrumented mutex to lock
@@ -890,6 +893,8 @@ struct PSI_v1
   set_thread_v1_t set_thread;
   /** @sa delete_current_thread_v1_t. */
   delete_current_thread_v1_t delete_current_thread;
+  /** @sa delete_thread_v1_t. */
+  delete_thread_v1_t delete_thread;
   /** @sa get_thread_mutex_locker_v1_t. */
   get_thread_mutex_locker_v1_t get_thread_mutex_locker;
   /** @sa get_thread_rwlock_locker_v1_t. */
diff --git a/include/mysql/psi/psi_abi_v1.h.pp b/include/mysql/psi/psi_abi_v1.h.pp
index aedf28ba694..6ecd0f3098d 100644
--- a/include/mysql/psi/psi_abi_v1.h.pp
+++ b/include/mysql/psi/psi_abi_v1.h.pp
@@ -127,6 +127,7 @@ typedef void (*set_thread_id_v1_t)(struct PSI_thread *thread,
 typedef struct PSI_thread* (*get_thread_v1_t)(void);
 typedef void (*set_thread_v1_t)(struct PSI_thread *thread);
 typedef void (*delete_current_thread_v1_t)(void);
+typedef void (*delete_thread_v1_t)(struct PSI_thread *thread);
 typedef struct PSI_mutex_locker* (*get_thread_mutex_locker_v1_t)
   (struct PSI_mutex *mutex, enum PSI_mutex_operation op);
 typedef struct PSI_rwlock_locker* (*get_thread_rwlock_locker_v1_t)
@@ -204,6 +205,7 @@ struct PSI_v1
   get_thread_v1_t get_thread;
   set_thread_v1_t set_thread;
   delete_current_thread_v1_t delete_current_thread;
+  delete_thread_v1_t delete_thread;
   get_thread_mutex_locker_v1_t get_thread_mutex_locker;
   get_thread_rwlock_locker_v1_t get_thread_rwlock_locker;
   get_thread_cond_locker_v1_t get_thread_cond_locker;
diff --git a/storage/perfschema/pfs.cc b/storage/perfschema/pfs.cc
index 01b4b3711c1..380801c8677 100644
--- a/storage/perfschema/pfs.cc
+++ b/storage/perfschema/pfs.cc
@@ -1081,6 +1081,13 @@ static void delete_current_thread_v1(void)
   }
 }
 
+static void delete_thread_v1(PSI_thread *thread)
+{
+  PFS_thread *pfs= reinterpret_cast<PFS_thread*> (thread);
+  if (pfs != NULL)
+    destroy_thread(pfs);
+}
+
 static PSI_mutex_locker*
 get_thread_mutex_locker_v1(PSI_mutex *mutex, PSI_mutex_operation op)
 {
@@ -2007,6 +2014,7 @@ PSI_v1 PFS_v1=
   get_thread_v1,
   set_thread_v1,
   delete_current_thread_v1,
+  delete_thread_v1,
   get_thread_mutex_locker_v1,
   get_thread_rwlock_locker_v1,
   get_thread_cond_locker_v1,
-- 
2.30.9