mirror of
https://github.com/MariaDB/server.git
synced 2025-01-16 20:12:31 +01:00
ecbcddc03d
Fixed compiler warnings. queues.h and queues.c are now based on the UNIREG code and thus made BSD. Fix code to use new queue() interface. This mostly affects how you access elements in the queue. If USE_NET_CLEAR is not set, don't clear connection from unexpected characters. This should give a speed up when doing a lot of fast queries. Fixed some code in ma_ft_boolean_search.c that had not made it from myisam/ft_boolean_search.c include/queues.h: Use UNIREG code base (BSD) Changed init_queue() to take all initialization arguments. New interface to access elements in queue include/thr_alarm.h: Changed to use time_t instead of ulong (portability) Added index_in_queue, to be able to remove random element from queue in O(1) mysys/queues.c: Use UNIREG code base (BSD) init_queue() and reinit_queue() now takes more initialization arguments. (No need for init_queue_ex() anymore) Now one can tell queue_insert() to store in the element a pointer to where element is in queue. This allows one to remove elements from queue in O(1) instead of O(N) mysys/thr_alarm.c: Use new option in queue() to allow fast removal of elements. Do less inside LOCK_alarm mutex. This should give a major speed up of thr_alarm usage when there is many threads sql/create_options.cc: Fixed wrong printf sql/event_queue.cc: Use new queue interface() sql/filesort.cc: Use new queue interface() sql/ha_partition.cc: Use new queue interface() sql/ha_partition.h: Fixed compiler warning sql/item_cmpfunc.cc: Fixed compiler warning sql/item_subselect.cc: Use new queue interface() Removed not used variable sql/net_serv.cc: If USE_NET_CLEAR is not set, don't clear connection from unexpected characters. This should give a speed up when doing a lot of fast queries at the disadvantage that if there is a bug in the client protocol the connection will be dropped instead of being unnoticed. sql/opt_range.cc: Use new queue interface() Fixed compiler warnings sql/uniques.cc: Use new queue interface() storage/maria/ma_ft_boolean_search.c: Copy code from myisam/ft_boolean_search.c Use new queue interface() storage/maria/ma_ft_nlq_search.c: Use new queue interface() storage/maria/ma_sort.c: Use new queue interface() storage/maria/maria_pack.c: Use new queue interface() Use queue_fix() instead of own loop to fix queue. storage/myisam/ft_boolean_search.c: Use new queue interface() storage/myisam/ft_nlq_search.c: Use new queue interface() storage/myisam/mi_test_all.sh: Remove temporary file from last run storage/myisam/myisampack.c: Use new queue interface() Use queue_fix() instead of own loop to fix queue. storage/myisam/sort.c: Use new queue interface() storage/myisammrg/myrg_queue.c: Use new queue interface() storage/myisammrg/myrg_rnext.c: Use new queue interface() storage/myisammrg/myrg_rnext_same.c: Use new queue interface() storage/myisammrg/myrg_rprev.c: Use new queue interface()
111 lines
2.8 KiB
C
111 lines
2.8 KiB
C
/* Copyright (C) 2000 MySQL AB
|
|
|
|
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 */
|
|
|
|
/* Prototypes when using thr_alarm library functions */
|
|
|
|
#ifndef _thr_alarm_h
|
|
#define _thr_alarm_h
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
|
|
#ifndef USE_ALARM_THREAD
|
|
#define USE_ONE_SIGNAL_HAND /* One must call process_alarm */
|
|
#endif
|
|
#ifdef HAVE_rts_threads
|
|
#undef USE_ONE_SIGNAL_HAND
|
|
#define USE_ALARM_THREAD
|
|
#define THR_SERVER_ALARM SIGUSR1
|
|
#else
|
|
#define THR_SERVER_ALARM SIGALRM
|
|
#endif
|
|
|
|
typedef struct st_alarm_info
|
|
{
|
|
time_t next_alarm_time;
|
|
uint active_alarms;
|
|
uint max_used_alarms;
|
|
} ALARM_INFO;
|
|
|
|
void thr_alarm_info(ALARM_INFO *info);
|
|
|
|
#if defined(DONT_USE_THR_ALARM) || !defined(THREAD)
|
|
|
|
#define USE_ALARM_THREAD
|
|
#undef USE_ONE_SIGNAL_HAND
|
|
|
|
typedef my_bool thr_alarm_t;
|
|
typedef my_bool ALARM;
|
|
|
|
#define thr_alarm_init(A) (*(A))=0
|
|
#define thr_alarm_in_use(A) (*(A) != 0)
|
|
#define thr_end_alarm(A)
|
|
#define thr_alarm(A,B,C) ((*(A)=1)-1)
|
|
/* The following should maybe be (*(A)) */
|
|
#define thr_got_alarm(A) 0
|
|
#define init_thr_alarm(A)
|
|
#define thr_alarm_kill(A)
|
|
#define resize_thr_alarm(N)
|
|
#define end_thr_alarm(A)
|
|
|
|
#else
|
|
#if defined(__WIN__)
|
|
typedef struct st_thr_alarm_entry
|
|
{
|
|
rf_SetTimer crono;
|
|
} thr_alarm_entry;
|
|
|
|
#else /* System with posix threads */
|
|
|
|
typedef int thr_alarm_entry;
|
|
|
|
#define thr_got_alarm(thr_alarm) (**(thr_alarm))
|
|
|
|
#endif /* __WIN__ */
|
|
|
|
typedef thr_alarm_entry* thr_alarm_t;
|
|
|
|
typedef struct st_alarm {
|
|
time_t expire_time;
|
|
thr_alarm_entry alarmed; /* set when alarm is due */
|
|
pthread_t thread;
|
|
my_thread_id thread_id;
|
|
uint index_in_queue;
|
|
my_bool malloced;
|
|
} ALARM;
|
|
|
|
extern uint thr_client_alarm;
|
|
extern pthread_t alarm_thread;
|
|
|
|
#define thr_alarm_init(A) (*(A))=0
|
|
#define thr_alarm_in_use(A) (*(A)!= 0)
|
|
void init_thr_alarm(uint max_alarm);
|
|
void resize_thr_alarm(uint max_alarms);
|
|
my_bool thr_alarm(thr_alarm_t *alarmed, uint sec, ALARM *buff);
|
|
void thr_alarm_kill(my_thread_id thread_id);
|
|
void thr_end_alarm(thr_alarm_t *alarmed);
|
|
void end_thr_alarm(my_bool free_structures);
|
|
sig_handler process_alarm(int);
|
|
#ifndef thr_got_alarm
|
|
my_bool thr_got_alarm(thr_alarm_t *alrm);
|
|
#endif
|
|
|
|
|
|
#endif /* DONT_USE_THR_ALARM */
|
|
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif /* __cplusplus */
|
|
#endif /* _thr_alarm_h */
|