mirror of
https://github.com/MariaDB/server.git
synced 2025-12-24 11:21:21 +03:00
Fixed a lot of compiler warnings and errors detected by Forte C++ on Solaris
Faster thr_alarm() Added 'Opened_files' status variable to track calls to my_open() Don't give warnings when running mysql_install_db Added option --source-install to mysql_install_db I had to do the following renames() as used polymorphism didn't work with Forte compiler on 64 bit systems index_read() -> index_read_map() index_read_idx() -> index_read_idx_map() index_read_last() -> index_read_last_map()
This commit is contained in:
@@ -38,7 +38,7 @@ uint thr_client_alarm;
|
||||
static int alarm_aborted=1; /* No alarm thread */
|
||||
my_bool thr_alarm_inited= 0;
|
||||
volatile my_bool alarm_thread_running= 0;
|
||||
|
||||
time_t next_alarm_expire_time= ~ (time_t) 0;
|
||||
static sig_handler process_alarm_part2(int sig);
|
||||
|
||||
#if !defined(__WIN__)
|
||||
@@ -71,6 +71,7 @@ void init_thr_alarm(uint max_alarms)
|
||||
sigset_t s;
|
||||
DBUG_ENTER("init_thr_alarm");
|
||||
alarm_aborted=0;
|
||||
next_alarm_expire_time= ~ (time_t) 0;
|
||||
init_queue(&alarm_queue,max_alarms+1,offsetof(ALARM,expire_time),0,
|
||||
compare_ulong,NullS);
|
||||
sigfillset(&full_signal_set); /* Neaded to block signals */
|
||||
@@ -150,22 +151,28 @@ void resize_thr_alarm(uint max_alarms)
|
||||
|
||||
my_bool thr_alarm(thr_alarm_t *alrm, uint sec, ALARM *alarm_data)
|
||||
{
|
||||
ulong now;
|
||||
time_t now;
|
||||
#ifndef USE_ONE_SIGNAL_HAND
|
||||
sigset_t old_mask;
|
||||
#endif
|
||||
my_bool reschedule;
|
||||
struct st_my_thread_var *current_my_thread_var= my_thread_var;
|
||||
DBUG_ENTER("thr_alarm");
|
||||
DBUG_PRINT("enter",("thread: %s sec: %d",my_thread_name(),sec));
|
||||
|
||||
now=(ulong) my_time(0);
|
||||
now= my_time(0);
|
||||
#ifndef USE_ONE_SIGNAL_HAND
|
||||
pthread_sigmask(SIG_BLOCK,&full_signal_set,&old_mask);
|
||||
#endif
|
||||
pthread_mutex_lock(&LOCK_alarm); /* Lock from threads & alarms */
|
||||
if (alarm_aborted > 0)
|
||||
{ /* No signal thread */
|
||||
DBUG_PRINT("info", ("alarm aborted"));
|
||||
*alrm= 0; /* No alarm */
|
||||
pthread_mutex_unlock(&LOCK_alarm);
|
||||
#ifndef USE_ONE_SIGNAL_HAND
|
||||
pthread_sigmask(SIG_SETMASK,&old_mask,NULL);
|
||||
#endif
|
||||
DBUG_RETURN(1);
|
||||
}
|
||||
if (alarm_aborted < 0)
|
||||
@@ -179,14 +186,14 @@ my_bool thr_alarm(thr_alarm_t *alrm, uint sec, ALARM *alarm_data)
|
||||
fprintf(stderr,"Warning: thr_alarm queue is full\n");
|
||||
*alrm= 0; /* No alarm */
|
||||
pthread_mutex_unlock(&LOCK_alarm);
|
||||
#ifndef USE_ONE_SIGNAL_HAND
|
||||
pthread_sigmask(SIG_SETMASK,&old_mask,NULL);
|
||||
#endif
|
||||
DBUG_RETURN(1);
|
||||
}
|
||||
max_used_alarms=alarm_queue.elements+1;
|
||||
}
|
||||
reschedule= (!alarm_queue.elements ||
|
||||
(int) (((ALARM*) queue_top(&alarm_queue))->expire_time - now) >
|
||||
(int) sec);
|
||||
reschedule= (ulong) next_alarm_expire_time > (ulong) now + sec;
|
||||
if (!alarm_data)
|
||||
{
|
||||
if (!(alarm_data=(ALARM*) my_malloc(sizeof(ALARM),MYF(MY_WME))))
|
||||
@@ -194,7 +201,9 @@ my_bool thr_alarm(thr_alarm_t *alrm, uint sec, ALARM *alarm_data)
|
||||
DBUG_PRINT("info", ("failed my_malloc()"));
|
||||
*alrm= 0; /* No alarm */
|
||||
pthread_mutex_unlock(&LOCK_alarm);
|
||||
#ifndef USE_ONE_SIGNAL_HAND
|
||||
pthread_sigmask(SIG_SETMASK,&old_mask,NULL);
|
||||
#endif
|
||||
DBUG_RETURN(1);
|
||||
}
|
||||
alarm_data->malloced=1;
|
||||
@@ -212,12 +221,17 @@ my_bool thr_alarm(thr_alarm_t *alrm, uint sec, ALARM *alarm_data)
|
||||
{
|
||||
DBUG_PRINT("info", ("reschedule"));
|
||||
if (pthread_equal(pthread_self(),alarm_thread))
|
||||
{
|
||||
alarm(sec); /* purecov: inspected */
|
||||
next_alarm_expire_time= now + sec;
|
||||
}
|
||||
else
|
||||
reschedule_alarms(); /* Reschedule alarms */
|
||||
}
|
||||
pthread_mutex_unlock(&LOCK_alarm);
|
||||
#ifndef USE_ONE_SIGNAL_HAND
|
||||
pthread_sigmask(SIG_SETMASK,&old_mask,NULL);
|
||||
#endif
|
||||
(*alrm)= &alarm_data->alarmed;
|
||||
DBUG_RETURN(0);
|
||||
}
|
||||
@@ -230,11 +244,15 @@ my_bool thr_alarm(thr_alarm_t *alrm, uint sec, ALARM *alarm_data)
|
||||
void thr_end_alarm(thr_alarm_t *alarmed)
|
||||
{
|
||||
ALARM *alarm_data;
|
||||
#ifndef USE_ONE_SIGNAL_HAND
|
||||
sigset_t old_mask;
|
||||
#endif
|
||||
uint i, found=0;
|
||||
DBUG_ENTER("thr_end_alarm");
|
||||
|
||||
#ifndef USE_ONE_SIGNAL_HAND
|
||||
pthread_sigmask(SIG_BLOCK,&full_signal_set,&old_mask);
|
||||
#endif
|
||||
pthread_mutex_lock(&LOCK_alarm);
|
||||
|
||||
alarm_data= (ALARM*) ((uchar*) *alarmed - offsetof(ALARM,alarmed));
|
||||
@@ -261,7 +279,9 @@ void thr_end_alarm(thr_alarm_t *alarmed)
|
||||
(long) *alarmed));
|
||||
}
|
||||
pthread_mutex_unlock(&LOCK_alarm);
|
||||
#ifndef USE_ONE_SIGNAL_HAND
|
||||
pthread_sigmask(SIG_SETMASK,&old_mask,NULL);
|
||||
#endif
|
||||
DBUG_VOID_RETURN;
|
||||
}
|
||||
|
||||
@@ -380,10 +400,18 @@ static sig_handler process_alarm_part2(int sig __attribute__((unused)))
|
||||
alarm(0); /* Remove old alarm */
|
||||
#endif
|
||||
alarm((uint) (alarm_data->expire_time-now));
|
||||
next_alarm_expire_time= alarm_data->expire_time;
|
||||
}
|
||||
#endif
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
/*
|
||||
Ensure that next time we call thr_alarm(), we will schedule a new alarm
|
||||
*/
|
||||
next_alarm_expire_time= ~(time_t) 0;
|
||||
}
|
||||
DBUG_VOID_RETURN;
|
||||
}
|
||||
|
||||
@@ -537,6 +565,7 @@ static void *alarm_handler(void *arg __attribute__((unused)))
|
||||
{
|
||||
abstime.tv_sec=sleep_time;
|
||||
abstime.tv_nsec=0;
|
||||
next_alarm_expire_time= sleep_time;
|
||||
if ((error=pthread_cond_timedwait(&COND_alarm,&LOCK_alarm,&abstime)) &&
|
||||
error != ETIME && error != ETIMEDOUT)
|
||||
{
|
||||
@@ -549,12 +578,16 @@ static void *alarm_handler(void *arg __attribute__((unused)))
|
||||
}
|
||||
else if (alarm_aborted == -1)
|
||||
break;
|
||||
else if ((error=pthread_cond_wait(&COND_alarm,&LOCK_alarm)))
|
||||
else
|
||||
{
|
||||
next_alarm_expire_time= ~ (time_t) 0;
|
||||
if ((error=pthread_cond_wait(&COND_alarm,&LOCK_alarm)))
|
||||
{
|
||||
#ifdef MAIN
|
||||
printf("Got error: %d from ptread_cond_wait (errno: %d)\n",
|
||||
error,errno);
|
||||
printf("Got error: %d from ptread_cond_wait (errno: %d)\n",
|
||||
error,errno);
|
||||
#endif
|
||||
}
|
||||
}
|
||||
process_alarm(0);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user