Index: V:/svn/winib/trunk/ulp/ipoib/kernel/SOURCES
===================================================================
--- V:/svn/winib/trunk/ulp/ipoib/kernel/SOURCES	(revision 4968)
+++ V:/svn/winib/trunk/ulp/ipoib/kernel/SOURCES	(revision 4969)
@@ -24,7 +24,8 @@
 		ipoib_endpoint.c \
 		ipoib_port.c \
 		ipoib_ibat.c \
-		ipoib_xfr_mgr.c
+		ipoib_xfr_mgr.c \
+		ipoib_stat.c
 
 INCLUDES=..;..\..\..\inc;..\..\..\inc\kernel;
 
Index: V:/svn/winib/trunk/ulp/ipoib/kernel/ipoib_stat.h
===================================================================
--- V:/svn/winib/trunk/ulp/ipoib/kernel/ipoib_stat.h	(revision 0)
+++ V:/svn/winib/trunk/ulp/ipoib/kernel/ipoib_stat.h	(revision 4969)
@@ -0,0 +1,76 @@
+/*++
+
+Copyright (c) 2005-2009 Mellanox Technologies. All rights reserved.
+
+Module Name:
+	ipoib_stat.h
+
+Abstract:
+	Statistics Collector header file
+
+Revision History:
+
+Notes:
+
+--*/
+
+#pragma once
+
+#include <ntddk.h>
+
+//
+// restrictions
+//
+
+#define IPOIB_ST_MAX_DEVICES			8
+
+//
+// enums
+// 
+
+//
+// structures
+//
+
+// device
+typedef struct _ipoib_adapter ipoib_adapter_t;
+
+typedef struct _IPOIB_ST_DEVICE
+{
+	boolean_t			valid;
+	ipoib_adapter_t		*p_adapter;
+	int					n_power_irps;	// NdisDevicePnPEventPowerProfileChanged 
+	int					n_pnp_irps;		// NdisDevicePnPEventSurpriseRemoved 
+	
+} IPOIB_ST_DEVICE, *PIPOIB_ST_DEVICE;
+
+// driver
+typedef struct _IPOIB_ST_DRIVER
+{
+	PDRIVER_OBJECT		obj;
+	
+} IPOIB_ST_DRIVER, *PIPOIB_ST_DRIVER;
+
+// driver stack
+
+typedef struct _IPOIB_ST_STAT
+{
+	IPOIB_ST_DRIVER		drv;
+	IPOIB_ST_DEVICE		dev[IPOIB_ST_MAX_DEVICES];
+	
+} IPOIB_ST_STAT, *PIPOIB_ST_STAT;
+
+extern IPOIB_ST_STAT g_stat;
+
+//
+// functions 
+//
+
+void ipoib_st_dev_rmv( PIPOIB_ST_DEVICE p_stat );
+
+PIPOIB_ST_DEVICE ipoib_st_dev_add();
+
+void ipoib_st_init();
+
+
+
Index: V:/svn/winib/trunk/ulp/ipoib/kernel/ipoib_adapter.h
===================================================================
--- V:/svn/winib/trunk/ulp/ipoib/kernel/ipoib_adapter.h	(revision 4968)
+++ V:/svn/winib/trunk/ulp/ipoib/kernel/ipoib_adapter.h	(revision 4969)
@@ -46,6 +46,7 @@
 #include <complib/cl_vector.h>
 #include <ip_packet.h>
 #include "ip_stats.h"
+#include "ipoib_stat.h"
 
 
 /*
@@ -194,6 +195,7 @@
 
 	cl_perf_t				perf;
 	ib_al_ifc_t				*p_ifc;
+	PIPOIB_ST_DEVICE		p_stat;
 
 }	ipoib_adapter_t;
 /*
Index: V:/svn/winib/trunk/ulp/ipoib/kernel/ipoib_driver.c
===================================================================
--- V:/svn/winib/trunk/ulp/ipoib/kernel/ipoib_driver.c	(revision 4968)
+++ V:/svn/winib/trunk/ulp/ipoib/kernel/ipoib_driver.c	(revision 4969)
@@ -354,6 +354,8 @@
 	
 	KeInitializeSpinLock( &g_ipoib.lock );
 	cl_qlist_init( &g_ipoib.adapter_list );
+	ipoib_st_init();
+	g_stat.drv.obj = p_drv_obj;
 
 	NdisMInitializeWrapper(
 		&g_ipoib.h_ndis_wrapper, p_drv_obj, p_registry_path, NULL );
@@ -792,6 +794,10 @@
 		return NDIS_STATUS_FAILURE;
 	}
 
+	p_adapter->p_stat = ipoib_st_dev_add();
+	if ( p_adapter->p_stat ) 
+		p_adapter->p_stat->p_adapter = p_adapter;
+	
 	ipoib_ref_ibat();
 
 	IPOIB_PRINT_EXIT(TRACE_LEVEL_WARNING, IPOIB_DBG_INIT, 
@@ -811,6 +817,7 @@
 	IN				NDIS_HANDLE					adapter_context )
 {
 	ipoib_adapter_t	*p_adapter;
+	PIPOIB_ST_DEVICE p_stat;
 
 	IPOIB_ENTER( IPOIB_DBG_INIT );
 
@@ -818,6 +825,7 @@
 
 	CL_ASSERT( adapter_context );
 	p_adapter = (ipoib_adapter_t*)adapter_context;
+	p_stat = p_adapter->p_stat;
 
 	IPOIB_PRINT( TRACE_LEVEL_INFORMATION, IPOIB_DBG_INIT,
 			("Port %016I64x (CA %016I64x port %d) halting\n",
@@ -825,6 +833,7 @@
 			p_adapter->guids.port_num) );
 
 	ipoib_destroy_adapter( p_adapter );
+	ipoib_st_dev_rmv( p_stat );
 
 	IPOIB_PRINT_EXIT(TRACE_LEVEL_WARNING, IPOIB_DBG_INIT, 
 		("=====> ipoib_halt exited\n"));
@@ -1933,7 +1942,10 @@
 		cl_obj_unlock( &p_adapter->obj );
 
 		ipoib_resume_oids( p_adapter );
+		p_adapter->p_stat->n_pnp_irps++;
 	}
+	else 
+		p_adapter->p_stat->n_power_irps++;
 
 	IPOIB_PRINT_EXIT(TRACE_LEVEL_WARNING, IPOIB_DBG_PNP, 
 		("=====> ipoib_pnp_notify exited, PnP event %d\n", pnp_event));
Index: V:/svn/winib/trunk/ulp/ipoib/kernel/ipoib_stat.c
===================================================================
--- V:/svn/winib/trunk/ulp/ipoib/kernel/ipoib_stat.c	(revision 0)
+++ V:/svn/winib/trunk/ulp/ipoib/kernel/ipoib_stat.c	(revision 4969)
@@ -0,0 +1,36 @@
+#include "precompile.h"
+
+#if defined (EVENT_TRACING)
+#ifdef offsetof
+#undef offsetof
+#endif
+#include "ipoib_stat.tmh"
+#endif 
+
+IPOIB_ST_STAT g_stat;
+
+void ipoib_st_dev_rmv( PIPOIB_ST_DEVICE p_stat )
+{
+	if ( p_stat )
+		p_stat->valid = FALSE;
+}
+
+PIPOIB_ST_DEVICE ipoib_st_dev_add()
+{
+	int i;
+
+	for ( i = 0; i < IPOIB_ST_MAX_DEVICES; ++i ) {
+		if ( g_stat.dev[i].valid == FALSE ) {
+			g_stat.dev[i].valid = TRUE;
+			return &g_stat.dev[i];
+		}
+	}
+
+	return NULL;
+}
+
+void ipoib_st_init()
+{
+	memset( &g_stat, 0, sizeof(g_stat) );
+}
+
Index: V:/svn/winib/trunk/ulp/ipoib_NDIS6_CM/kernel/SOURCES
===================================================================
--- V:/svn/winib/trunk/ulp/ipoib_NDIS6_CM/kernel/SOURCES	(revision 4968)
+++ V:/svn/winib/trunk/ulp/ipoib_NDIS6_CM/kernel/SOURCES	(revision 4969)
@@ -25,7 +25,8 @@
 		ipoib_port.cpp \
 		ipoib_ibat.cpp \
 #		ipoib_cm.cpp	\
-		ipoib_xfr_mgr.cpp
+		ipoib_xfr_mgr.cpp \
+		ipoib_stat.cpp
 
 INCLUDES=..;..\..\..\inc;..\..\..\inc\kernel;
 
Index: V:/svn/winib/trunk/ulp/ipoib_NDIS6_CM/kernel/ipoib_stat.h
===================================================================
--- V:/svn/winib/trunk/ulp/ipoib_NDIS6_CM/kernel/ipoib_stat.h	(revision 0)
+++ V:/svn/winib/trunk/ulp/ipoib_NDIS6_CM/kernel/ipoib_stat.h	(revision 4969)
@@ -0,0 +1,76 @@
+/*++
+
+Copyright (c) 2005-2009 Mellanox Technologies. All rights reserved.
+
+Module Name:
+	ipoib_stat.h
+
+Abstract:
+	Statistics Collector header file
+
+Revision History:
+
+Notes:
+
+--*/
+
+#pragma once
+
+#include <ntddk.h>
+
+//
+// restrictions
+//
+
+#define IPOIB_ST_MAX_DEVICES			8
+
+//
+// enums
+// 
+
+//
+// structures
+//
+
+// device
+typedef struct _ipoib_adapter ipoib_adapter_t;
+
+typedef struct _IPOIB_ST_DEVICE
+{
+	boolean_t			valid;
+	ipoib_adapter_t		*p_adapter;
+	int					n_power_irps;	// NdisDevicePnPEventPowerProfileChanged 
+	int					n_pnp_irps;		// NdisDevicePnPEventSurpriseRemoved 
+	
+} IPOIB_ST_DEVICE, *PIPOIB_ST_DEVICE;
+
+// driver
+typedef struct _IPOIB_ST_DRIVER
+{
+	PDRIVER_OBJECT		obj;
+	
+} IPOIB_ST_DRIVER, *PIPOIB_ST_DRIVER;
+
+// driver stack
+
+typedef struct _IPOIB_ST_STAT
+{
+	IPOIB_ST_DRIVER		drv;
+	IPOIB_ST_DEVICE		dev[IPOIB_ST_MAX_DEVICES];
+	
+} IPOIB_ST_STAT, *PIPOIB_ST_STAT;
+
+extern IPOIB_ST_STAT g_stat;
+
+//
+// functions 
+//
+
+void ipoib_st_dev_rmv( PIPOIB_ST_DEVICE p_stat );
+
+PIPOIB_ST_DEVICE ipoib_st_dev_add();
+
+void ipoib_st_init();
+
+
+
Index: V:/svn/winib/trunk/ulp/ipoib_NDIS6_CM/kernel/precompile.h
===================================================================
--- V:/svn/winib/trunk/ulp/ipoib_NDIS6_CM/kernel/precompile.h	(revision 4968)
+++ V:/svn/winib/trunk/ulp/ipoib_NDIS6_CM/kernel/precompile.h	(revision 4969)
@@ -20,7 +20,6 @@
 #include "ipoib_port.h"
 
 
-
 #include "ipoib_adapter.h"
 
 
Index: V:/svn/winib/trunk/ulp/ipoib_NDIS6_CM/kernel/ipoib_adapter.h
===================================================================
--- V:/svn/winib/trunk/ulp/ipoib_NDIS6_CM/kernel/ipoib_adapter.h	(revision 4968)
+++ V:/svn/winib/trunk/ulp/ipoib_NDIS6_CM/kernel/ipoib_adapter.h	(revision 4969)
@@ -46,6 +46,7 @@
 #include <complib/cl_vector.h>
 #include <ip_packet.h>
 #include "ip_stats.h"
+#include "ipoib_stat.h"
 
 
 /*
@@ -231,6 +232,7 @@
 	ib_al_ifc_t				*p_ifc;
 
 	ULONG					sg_list_size;
+	PIPOIB_ST_DEVICE		p_stat;
 
 }	ipoib_adapter_t;
 /*
Index: V:/svn/winib/trunk/ulp/ipoib_NDIS6_CM/kernel/ipoib_driver.cpp
===================================================================
--- V:/svn/winib/trunk/ulp/ipoib_NDIS6_CM/kernel/ipoib_driver.cpp	(revision 4968)
+++ V:/svn/winib/trunk/ulp/ipoib_NDIS6_CM/kernel/ipoib_driver.cpp	(revision 4969)
@@ -589,6 +589,8 @@
 	
 	KeInitializeSpinLock( &g_ipoib.lock );
 	cl_qlist_init( &g_ipoib.adapter_list );
+	ipoib_st_init();
+	g_stat.drv.obj = p_drv_obj;
 
     NdisZeroMemory(&characteristics, sizeof(characteristics));
 
@@ -619,8 +621,6 @@
 	characteristics.CancelSendHandler			= ipoib_cancel_xmit;
 	characteristics.ShutdownHandlerEx			= ipoib_shutdown_ex;
 
-
-
 	status = NdisMRegisterMiniportDriver(
 		p_drv_obj, p_registry_path,(PNDIS_HANDLE)&g_IpoibDriverContext, &characteristics,&g_IpoibMiniportDriverHandle );
 	if( status != NDIS_STATUS_SUCCESS )
@@ -2052,6 +2052,10 @@
 			return NDIS_STATUS_FAILURE;
 		}
 
+		p_adapter->p_stat = ipoib_st_dev_add();
+		if ( p_adapter->p_stat ) 
+			p_adapter->p_stat->p_adapter = p_adapter;
+
 		ipoib_ref_ibat();
 	
 		IPOIB_EXIT( IPOIB_DBG_INIT );
@@ -2093,7 +2097,10 @@
 		p_adapter->NdisMiniportDmaHandle = NULL;
 	}
 #endif
+
+	PIPOIB_ST_DEVICE p_stat = p_adapter->p_stat;
 	ipoib_destroy_adapter( p_adapter );
+	ipoib_st_dev_rmv( p_stat );
 
 	IPOIB_EXIT( IPOIB_DBG_INIT );
 }
@@ -3384,7 +3391,10 @@
 		cl_obj_unlock( &p_adapter->obj );
 
 		ipoib_resume_oids( p_adapter );
+		p_adapter->p_stat->n_pnp_irps++;
 	}
+	else 
+		p_adapter->p_stat->n_power_irps++;
 
 	IPOIB_EXIT( IPOIB_DBG_PNP );
 }
Index: V:/svn/winib/trunk/ulp/ipoib_NDIS6_CM/kernel/ipoib_stat.cpp
===================================================================
--- V:/svn/winib/trunk/ulp/ipoib_NDIS6_CM/kernel/ipoib_stat.cpp	(revision 0)
+++ V:/svn/winib/trunk/ulp/ipoib_NDIS6_CM/kernel/ipoib_stat.cpp	(revision 4969)
@@ -0,0 +1,36 @@
+#include "precompile.h"
+
+#if defined (EVENT_TRACING)
+#ifdef offsetof
+#undef offsetof
+#endif
+#include "ipoib_stat.tmh"
+#endif 
+
+IPOIB_ST_STAT g_stat;
+
+void ipoib_st_dev_rmv( PIPOIB_ST_DEVICE p_stat )
+{
+	if ( p_stat )
+		p_stat->valid = FALSE;
+}
+
+PIPOIB_ST_DEVICE ipoib_st_dev_add()
+{
+	int i;
+
+	for ( i = 0; i < IPOIB_ST_MAX_DEVICES; ++i ) {
+		if ( g_stat.dev[i].valid == FALSE ) {
+			g_stat.dev[i].valid = TRUE;
+			return &g_stat.dev[i];
+		}
+	}
+
+	return NULL;
+}
+
+void ipoib_st_init()
+{
+	memset( &g_stat, 0, sizeof(g_stat) );
+}
+
Index: V:/svn/winib/trunk/core/complib/kernel/cl_thread.c
===================================================================
--- V:/svn/winib/trunk/core/complib/kernel/cl_thread.c	(revision 4968)
+++ V:/svn/winib/trunk/core/complib/kernel/cl_thread.c	(revision 4969)
@@ -29,7 +29,6 @@
  * $Id$
  */
 
-
 #include "complib/cl_thread.h"
 
 
@@ -72,12 +71,11 @@
 	CL_ASSERT( p_thread && pfn_callback );
 	CL_ASSERT( KeGetCurrentIrql() == PASSIVE_LEVEL );
 
-	UNUSED_PARAM( name );
-
 	cl_thread_construct( p_thread );
 
 	p_thread->pfn_callback = pfn_callback;
 	p_thread->context = context;
+	strncpy( &p_thread->name[0], name, sizeof(p_thread->name) );
 
 	/* Create a new thread, storing both the handle and thread id. */
 	InitializeObjectAttributes( &attr, NULL, OBJ_KERNEL_HANDLE, NULL, NULL );
@@ -135,4 +133,4 @@
 	IN	const cl_thread_t* const	p_thread )
 {
 	return( p_thread->osd.p_thread == KeGetCurrentThread() );
-}
\ No newline at end of file
+}
Index: V:/svn/winib/trunk/core/complib/cl_threadpool.c
===================================================================
--- V:/svn/winib/trunk/core/complib/cl_threadpool.c	(revision 4968)
+++ V:/svn/winib/trunk/core/complib/cl_threadpool.c	(revision 4969)
@@ -169,6 +169,10 @@
 		 * will signal all the threads.
 		 */
 		cl_atomic_inc( &p_thread_pool->running_count );
+
+		/* for debug only */
+		if ( i < sizeof(p_thread_pool->p_thread)/sizeof(cl_thread_t*) )
+			p_thread_pool->p_thread[i] = p_thread;
 	}
 	p_thread_pool->state = CL_INITIALIZED;
 	return( CL_SUCCESS );
Index: V:/svn/winib/trunk/core/bus/kernel/SOURCES
===================================================================
--- V:/svn/winib/trunk/core/bus/kernel/SOURCES	(revision 4968)
+++ V:/svn/winib/trunk/core/bus/kernel/SOURCES	(revision 4969)
@@ -14,7 +14,8 @@
 	bus_driver.c		\
 	bus_pnp.c			\
 	bus_port_mgr.c		\
-	bus_iou_mgr.c
+	bus_iou_mgr.c		\
+	bus_stat.c
 
 INCLUDES=..\..\..\inc;..\..\..\inc\kernel;..\..\al;..\..\al\kernel;..\..\bus\kernel\$O;
 
Index: V:/svn/winib/trunk/core/bus/kernel/bus_driver.c
===================================================================
--- V:/svn/winib/trunk/core/bus/kernel/bus_driver.c	(revision 4968)
+++ V:/svn/winib/trunk/core/bus/kernel/bus_driver.c	(revision 4969)
@@ -1045,6 +1045,8 @@
 
 	/* Store the driver object pointer in the global parameters. */
 	bus_globals.p_driver_obj = p_driver_obj;
+	bus_st_init();
+	g_stat.drv.p_globals = &bus_globals;
 
 	/* Get the registry values. */
 	status = __read_registry( p_registry_path );
Index: V:/svn/winib/trunk/core/bus/kernel/bus_pnp.c
===================================================================
--- V:/svn/winib/trunk/core/bus/kernel/bus_pnp.c	(revision 4968)
+++ V:/svn/winib/trunk/core/bus/kernel/bus_pnp.c	(revision 4969)
@@ -465,6 +465,11 @@
 	}
 	p_ext->device_power_state = PowerDeviceD0;
 
+	p_ext->p_stat = bus_st_dev_add();
+	if ( p_ext->p_stat ) 
+		p_ext->p_stat->p_fdo = p_ext;
+	
+
 	lock_control_event();
 	if ( !gp_async_proc_mgr ) {
 		/* Initialize AL */
@@ -479,6 +484,12 @@
 		}
 		AL_init_here = TRUE;
 		BUS_TRACE( BUS_DBG_PNP, ("AL initialized\n"));
+		/* for debug */
+		g_stat.drv.gp_async_obj_mgr = gp_async_obj_mgr;
+		g_stat.drv.gp_async_proc_mgr = gp_async_proc_mgr;
+		g_stat.drv.gp_async_pnp_mgr = gp_async_pnp_mgr;
+		g_stat.drv.gp_al_mgr = gp_al_mgr;
+		g_stat.drv.gp_obj_mgr = gp_obj_mgr;
 	}
 	unlock_control_event();
 
@@ -623,11 +634,13 @@
 	NTSTATUS		status;
 	bus_filter_t	*p_bfi;
 	int				ic;
+	PBUS_ST_DEVICE p_stat;
 
 	BUS_ENTER( BUS_DBG_PNP );
 
 	p_ext = p_dev_obj->DeviceExtension;
 	ic = get_bfi_count();
+	p_stat = p_ext->p_stat;
 
 	p_bfi = p_ext->bus_filter;
 	CL_ASSERT( p_bfi );
@@ -665,6 +678,7 @@
 	/* if not last Buf Filter Instance, then exit, otherwise cleanup/shutdown */
 	if ( ic > 0 ) {
 		BUS_TRACE_EXIT( BUS_DBG_PNP, ("%d remaining BusFilters\n", ic ));
+		bus_st_dev_rmv( p_stat );
 		return;
 	}
 
@@ -707,6 +721,8 @@
 	}
 #endif	
 
+	bus_st_dev_rmv( p_stat );
+
 	BUS_TRACE_EXIT( BUS_DBG_PNP, 
 		("=====> IBBUS: fdo_release_resources exited \n") );
 }
Index: V:/svn/winib/trunk/core/bus/kernel/bus_driver.h
===================================================================
--- V:/svn/winib/trunk/core/bus/kernel/bus_driver.h	(revision 4968)
+++ V:/svn/winib/trunk/core/bus/kernel/bus_driver.h	(revision 4969)
@@ -47,6 +47,7 @@
 #include "bus_iou_mgr.h"
 #include "al_dev.h"
 #include <rdma/verbs.h>
+#include "bus_stat.h"
 
 /* Safe string functions. */
 #if WINVER == 0x500
@@ -135,6 +136,8 @@
 	PIO_WORKITEM			p_po_work_item;
 	/* current PnP state */
 	PNP_DEVICE_STATE		pnp_state; /* state for PnP Manager */
+	/* statistics */
+	PBUS_ST_DEVICE			p_stat;
 
 }	bus_fdo_ext_t;
 
Index: V:/svn/winib/trunk/core/al/kernel/SOURCES
===================================================================
--- V:/svn/winib/trunk/core/al/kernel/SOURCES	(revision 4968)
+++ V:/svn/winib/trunk/core/al/kernel/SOURCES	(revision 4969)
@@ -56,7 +56,7 @@
 	..\ib_common.c			\
 	..\ib_statustext.c
 
-INCLUDES=..;..\..\..\inc;..\..\..\inc\kernel;..\..\bus\kernel\$O;
+INCLUDES=..;..\..\..\inc;..\..\..\inc\kernel;..\..\bus\kernel;..\..\bus\kernel\$O;
 
 C_DEFINES=$(C_DEFINES) -DDRIVER -DDEPRECATE_DDK_FUNCTIONS \
 	-DEXPORT_AL_SYMBOLS
Index: V:/svn/winib/trunk/core/al/al_mgr.h
===================================================================
--- V:/svn/winib/trunk/core/al/al_mgr.h	(revision 4968)
+++ V:/svn/winib/trunk/core/al/al_mgr.h	(revision 4969)
@@ -74,8 +74,11 @@
 al_mgr_t			*gp_al_mgr;
 ib_al_handle_t		gh_al;
 ib_pool_handle_t	gh_mad_pool;
+void				*gp_tmp;
+cl_obj_mgr_t		*gp_obj_mgr;
 
 
+
 ib_api_status_t
 create_al_mgr( void );
 
Index: V:/svn/winib/trunk/core/al/al_init.c
===================================================================
--- V:/svn/winib/trunk/core/al/al_init.c	(revision 4968)
+++ V:/svn/winib/trunk/core/al/al_init.c	(revision 4969)
@@ -88,7 +88,7 @@
 		return ib_convert_cl_status( cl_status );
 	}
 #endif
-	cl_status = cl_async_proc_init( gp_async_proc_mgr, 1, "Althread" );
+	cl_status = cl_async_proc_init( gp_async_proc_mgr, 1, "AL_MISC" );
 	if( cl_status != CL_SUCCESS )
 	{
 		AL_PRINT( TRACE_LEVEL_ERROR, AL_DBG_ERROR,
Index: V:/svn/winib/trunk/inc/complib/cl_threadpool.h
===================================================================
--- V:/svn/winib/trunk/inc/complib/cl_threadpool.h	(revision 4968)
+++ V:/svn/winib/trunk/inc/complib/cl_threadpool.h	(revision 4969)
@@ -98,6 +98,8 @@
 	boolean_t					exit;
 	cl_state_t					state;
 	atomic32_t					running_count;
+	// for debug
+	cl_thread_t					*p_thread[8];
 
 } cl_thread_pool_t;
 /*
