mirror of
				https://github.com/MariaDB/server.git
				synced 2025-11-03 14:33:32 +03:00 
			
		
		
		
	In order to allow thread schedulers to be dynamically loaded, it is necessary to make the following changes to the server: - Two new service interfaces - Modifications to InnoDB to inform the thread scheduler of state changes. - Changes to the VIO subsystem for checking if data is available on a socket. - Elimination of remains of the old thread pool implementation. The two new service interfaces introduces are: my_thread_scheduler A service interface to register a thread scheduler. thd_wait A service interface to inform thread scheduler that the thread is about to start waiting. In addition, the patch adds code that: - Add a call to thd_wait for table locks in mysys thd_lock.c by introducing a set function that can be used to set a callback to be used when waiting on a lock and resuming from waiting. - Calling the mysys set function from the server to set the callbacks correctly.
		
			
				
	
	
		
			59 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			59 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
/* Copyright (C) 2009 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
 | 
						|
   the Free Software Foundation; version 2 of the License.
 | 
						|
 | 
						|
   This program is distributed in the hope that it will be useful,
 | 
						|
   but WITHOUT ANY WARRANTY; without even the implied warranty of
 | 
						|
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 | 
						|
   GNU General Public License for more details.
 | 
						|
 | 
						|
   You should have received a copy of the GNU General Public License
 | 
						|
   along with this program; if not, write to the Free Software
 | 
						|
   Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA */
 | 
						|
 | 
						|
/* support for Services */
 | 
						|
#include <service_versions.h>
 | 
						|
 | 
						|
struct st_service_ref {
 | 
						|
  const char *name;
 | 
						|
  uint version;
 | 
						|
  void *service;
 | 
						|
};
 | 
						|
 | 
						|
static struct my_snprintf_service_st my_snprintf_handler = {
 | 
						|
  my_snprintf,
 | 
						|
  my_vsnprintf
 | 
						|
};
 | 
						|
 | 
						|
static struct thd_alloc_service_st thd_alloc_handler= {
 | 
						|
  thd_alloc,
 | 
						|
  thd_calloc,
 | 
						|
  thd_strdup,
 | 
						|
  thd_strmake,
 | 
						|
  thd_memdup,
 | 
						|
  thd_make_lex_string
 | 
						|
};
 | 
						|
 | 
						|
static struct thd_wait_service_st thd_wait_handler= {
 | 
						|
  thd_wait_begin,
 | 
						|
  thd_wait_end
 | 
						|
};
 | 
						|
 | 
						|
static struct my_thread_scheduler_service my_thread_scheduler_handler= {
 | 
						|
  my_thread_scheduler_set,
 | 
						|
  my_thread_scheduler_reset,
 | 
						|
};
 | 
						|
 | 
						|
 | 
						|
static struct st_service_ref list_of_services[]=
 | 
						|
{
 | 
						|
  { "my_snprintf_service", VERSION_my_snprintf, &my_snprintf_handler },
 | 
						|
  { "thd_alloc_service",   VERSION_thd_alloc,   &thd_alloc_handler },
 | 
						|
  { "thd_wait_service",    VERSION_thd_wait,    &thd_wait_handler },
 | 
						|
  { "my_thread_scheduler_service",
 | 
						|
    VERSION_my_thread_scheduler, &my_thread_scheduler_handler },
 | 
						|
};
 | 
						|
 |