summaryrefslogtreecommitdiff
path: root/mysys
diff options
context:
space:
mode:
authorMikael Ronstrom <mikael@dator8>2011-01-14 09:58:21 +0100
committerMikael Ronstrom <mikael@dator8>2011-01-14 09:58:21 +0100
commit45d9801696392cff9965b992874f4a121fca2ee3 (patch)
treeab6dbd737e938ce32613fa75dfc3c7278c922a6c /mysys
parent02e823451569f8ae90ed44a4357e7a4382c8e2c5 (diff)
parentff2b529918c2c12d4a29f8f34c5d9afbf5e40464 (diff)
downloadmariadb-git-45d9801696392cff9965b992874f4a121fca2ee3.tar.gz
merge to mysql-5.5
Diffstat (limited to 'mysys')
-rw-r--r--mysys/my_getsystime.c140
-rw-r--r--mysys/my_init.c3
-rw-r--r--mysys/my_thr_init.c4
-rw-r--r--mysys/mysys_priv.h4
4 files changed, 52 insertions, 99 deletions
diff --git a/mysys/my_getsystime.c b/mysys/my_getsystime.c
index 614f49fc425..01b3b912aae 100644
--- a/mysys/my_getsystime.c
+++ b/mysys/my_getsystime.c
@@ -25,13 +25,25 @@
#include "mysys_priv.h"
#include "my_static.h"
+/**
+ Get high-resolution time.
+
+ @remark For windows platforms we need the frequency value of
+ the CPU. This is initialized in my_init.c through
+ QueryPerformanceFrequency(). If the Windows platform
+ doesn't support QueryPerformanceFrequency(), zero is
+ returned.
+
+ @retval current high-resolution time.
+*/
+
ulonglong my_getsystime()
{
#ifdef HAVE_CLOCK_GETTIME
struct timespec tp;
clock_gettime(CLOCK_REALTIME, &tp);
return (ulonglong)tp.tv_sec*10000000+(ulonglong)tp.tv_nsec/100;
-#elif defined(__WIN__)
+#elif defined(_WIN32)
LARGE_INTEGER t_cnt;
if (query_performance_frequency)
{
@@ -50,22 +62,17 @@ ulonglong my_getsystime()
}
-/*
- Return current time
+/**
+ Return current time.
- SYNOPSIS
- my_time()
- flags If MY_WME is set, write error if time call fails
+ @param flags If MY_WME is set, write error if time call fails.
+ @retval current time.
*/
-time_t my_time(myf flags __attribute__((unused)))
+time_t my_time(myf flags)
{
time_t t;
-#ifdef HAVE_GETHRTIME
- (void) my_micro_time_and_time(&t);
- return t;
-#else
/* The following loop is here beacuse time() may fail on some systems */
while ((t= time(0)) == (time_t) -1)
{
@@ -73,39 +80,26 @@ time_t my_time(myf flags __attribute__((unused)))
fprintf(stderr, "%s: Warning: time() call failed\n", my_progname);
}
return t;
-#endif
}
-/*
- Return time in micro seconds
-
- SYNOPSIS
- my_micro_time()
-
- NOTES
- This function is to be used to measure performance in micro seconds.
- As it's not defined whats the start time for the clock, this function
- us only useful to measure time between two moments.
+/**
+ Return time in microseconds.
- For windows platforms we need the frequency value of the CUP. This is
- initalized in my_init.c through QueryPerformanceFrequency().
+ @remark This function is to be used to measure performance in
+ micro seconds. As it's not defined whats the start time
+ for the clock, this function us only useful to measure
+ time between two moments.
- If Windows platform doesn't support QueryPerformanceFrequency() we will
- obtain the time via GetClockCount, which only supports milliseconds.
-
- RETURN
- Value in microseconds from some undefined point in time
+ @retval Value in microseconds from some undefined point in time.
*/
ulonglong my_micro_time()
{
-#if defined(__WIN__)
+#ifdef _WIN32
ulonglong newtime;
GetSystemTimeAsFileTime((FILETIME*)&newtime);
return (newtime/10);
-#elif defined(HAVE_GETHRTIME)
- return gethrtime()/1000;
#else
ulonglong newtime;
struct timeval t;
@@ -116,69 +110,37 @@ ulonglong my_micro_time()
{}
newtime= (ulonglong)t.tv_sec * 1000000 + t.tv_usec;
return newtime;
-#endif /* defined(__WIN__) */
+#endif
}
-/*
+/**
Return time in seconds and timer in microseconds (not different start!)
- SYNOPSIS
- my_micro_time_and_time()
- time_arg Will be set to seconds since epoch (00:00:00 UTC,
- January 1, 1970)
+ @param time_arg Will be set to seconds since epoch.
- NOTES
- This function is to be useful when we need both the time and microtime.
- For example in MySQL this is used to get the query time start of a query
- and to measure the time of a query (for the slow query log)
+ @remark This function is to be useful when we need both the time and
+ microtime. For example in MySQL this is used to get the query
+ time start of a query and to measure the time of a query (for
+ the slow query log)
- IMPLEMENTATION
- Value of time is as in time() call.
- Value of microtime is same as my_micro_time(), which may be totally
- unrealated to time()
+ @remark The time source is the same as for my_micro_time(), meaning
+ that time values returned by both functions can be intermixed
+ in meaningful ways (i.e. for comparison purposes).
- RETURN
- Value in microseconds from some undefined point in time
+ @retval Value in microseconds from some undefined point in time.
*/
-#define DELTA_FOR_SECONDS 500000000LL /* Half a second */
-
/* Difference between GetSystemTimeAsFileTime() and now() */
#define OFFSET_TO_EPOCH 116444736000000000ULL
ulonglong my_micro_time_and_time(time_t *time_arg)
{
-#if defined(__WIN__)
+#ifdef _WIN32
ulonglong newtime;
GetSystemTimeAsFileTime((FILETIME*)&newtime);
*time_arg= (time_t) ((newtime - OFFSET_TO_EPOCH) / 10000000);
return (newtime/10);
-#elif defined(HAVE_GETHRTIME)
- /*
- Solaris has a very slow time() call. We optimize this by using the very
- fast gethrtime() call and only calling time() every 1/2 second
- */
- static hrtime_t prev_gethrtime= 0;
- static time_t cur_time= 0;
- hrtime_t cur_gethrtime;
-
- mysql_mutex_lock(&THR_LOCK_time);
- cur_gethrtime= gethrtime();
- /*
- Due to bugs in the Solaris (x86) implementation of gethrtime(),
- the time returned by it might not be monotonic. Don't use the
- cached time(2) value if this is a case.
- */
- if ((prev_gethrtime > cur_gethrtime) ||
- ((cur_gethrtime - prev_gethrtime) > DELTA_FOR_SECONDS))
- {
- cur_time= time(0);
- prev_gethrtime= cur_gethrtime;
- }
- *time_arg= cur_time;
- mysql_mutex_unlock(&THR_LOCK_time);
- return cur_gethrtime/1000;
#else
ulonglong newtime;
struct timeval t;
@@ -190,37 +152,31 @@ ulonglong my_micro_time_and_time(time_t *time_arg)
*time_arg= t.tv_sec;
newtime= (ulonglong)t.tv_sec * 1000000 + t.tv_usec;
return newtime;
-#endif /* defined(__WIN__) */
+#endif
}
-/*
- Returns current time
+/**
+ Returns current time.
- SYNOPSIS
- my_time_possible_from_micro()
- microtime Value from very recent my_micro_time()
+ @param microtime Value from very recent my_micro_time().
- NOTES
- This function returns the current time. The microtime argument is only used
- if my_micro_time() uses a function that can safely be converted to the
- current time.
+ @remark This function returns the current time. The microtime argument
+ is only used if my_micro_time() uses a function that can safely
+ be converted to the current time.
- RETURN
- current time
+ @retval current time.
*/
time_t my_time_possible_from_micro(ulonglong microtime __attribute__((unused)))
{
-#if defined(__WIN__)
+#ifdef _WIN32
time_t t;
while ((t= time(0)) == (time_t) -1)
{}
return t;
-#elif defined(HAVE_GETHRTIME)
- return my_time(0); /* Cached time */
#else
return (time_t) (microtime / 1000000);
-#endif /* defined(__WIN__) */
+#endif
}
diff --git a/mysys/my_init.c b/mysys/my_init.c
index f5a2d9ac4bd..9a17d0d6916 100644
--- a/mysys/my_init.c
+++ b/mysys/my_init.c
@@ -510,7 +510,7 @@ PSI_mutex_key key_BITMAP_mutex, key_IO_CACHE_append_buffer_lock,
key_my_thread_var_mutex, key_THR_LOCK_charset, key_THR_LOCK_heap,
key_THR_LOCK_isam, key_THR_LOCK_lock, key_THR_LOCK_malloc,
key_THR_LOCK_mutex, key_THR_LOCK_myisam, key_THR_LOCK_net,
- key_THR_LOCK_open, key_THR_LOCK_threads, key_THR_LOCK_time,
+ key_THR_LOCK_open, key_THR_LOCK_threads,
key_TMPDIR_mutex, key_THR_LOCK_myisam_mmap;
static PSI_mutex_info all_mysys_mutexes[]=
@@ -540,7 +540,6 @@ static PSI_mutex_info all_mysys_mutexes[]=
{ &key_THR_LOCK_net, "THR_LOCK_net", PSI_FLAG_GLOBAL},
{ &key_THR_LOCK_open, "THR_LOCK_open", PSI_FLAG_GLOBAL},
{ &key_THR_LOCK_threads, "THR_LOCK_threads", PSI_FLAG_GLOBAL},
- { &key_THR_LOCK_time, "THR_LOCK_time", PSI_FLAG_GLOBAL},
{ &key_TMPDIR_mutex, "TMPDIR_mutex", PSI_FLAG_GLOBAL},
{ &key_THR_LOCK_myisam_mmap, "THR_LOCK_myisam_mmap", PSI_FLAG_GLOBAL}
};
diff --git a/mysys/my_thr_init.c b/mysys/my_thr_init.c
index c4b56cde850..a672d8af818 100644
--- a/mysys/my_thr_init.c
+++ b/mysys/my_thr_init.c
@@ -25,7 +25,7 @@
pthread_key(struct st_my_thread_var*, THR_KEY_mysys);
mysql_mutex_t THR_LOCK_malloc, THR_LOCK_open,
THR_LOCK_lock, THR_LOCK_isam, THR_LOCK_myisam, THR_LOCK_heap,
- THR_LOCK_net, THR_LOCK_charset, THR_LOCK_threads, THR_LOCK_time,
+ THR_LOCK_net, THR_LOCK_charset, THR_LOCK_threads,
THR_LOCK_myisam_mmap;
mysql_cond_t THR_COND_threads;
@@ -219,7 +219,6 @@ my_bool my_thread_global_init(void)
mysql_mutex_init(key_THR_LOCK_myisam_mmap, &THR_LOCK_myisam_mmap, MY_MUTEX_INIT_FAST);
mysql_mutex_init(key_THR_LOCK_heap, &THR_LOCK_heap, MY_MUTEX_INIT_FAST);
mysql_mutex_init(key_THR_LOCK_net, &THR_LOCK_net, MY_MUTEX_INIT_FAST);
- mysql_mutex_init(key_THR_LOCK_time, &THR_LOCK_time, MY_MUTEX_INIT_FAST);
mysql_cond_init(key_THR_COND_threads, &THR_COND_threads, NULL);
#if !defined(HAVE_LOCALTIME_R) || !defined(HAVE_GMTIME_R)
@@ -288,7 +287,6 @@ void my_thread_global_end(void)
mysql_mutex_destroy(&THR_LOCK_myisam_mmap);
mysql_mutex_destroy(&THR_LOCK_heap);
mysql_mutex_destroy(&THR_LOCK_net);
- mysql_mutex_destroy(&THR_LOCK_time);
mysql_mutex_destroy(&THR_LOCK_charset);
if (all_threads_killed)
{
diff --git a/mysys/mysys_priv.h b/mysys/mysys_priv.h
index 4e642b7e3d3..e760ea808b7 100644
--- a/mysys/mysys_priv.h
+++ b/mysys/mysys_priv.h
@@ -45,7 +45,7 @@ extern PSI_mutex_key key_BITMAP_mutex, key_IO_CACHE_append_buffer_lock,
key_my_thread_var_mutex, key_THR_LOCK_charset, key_THR_LOCK_heap,
key_THR_LOCK_isam, key_THR_LOCK_lock, key_THR_LOCK_malloc,
key_THR_LOCK_mutex, key_THR_LOCK_myisam, key_THR_LOCK_net,
- key_THR_LOCK_open, key_THR_LOCK_threads, key_THR_LOCK_time,
+ key_THR_LOCK_open, key_THR_LOCK_threads,
key_TMPDIR_mutex, key_THR_LOCK_myisam_mmap;
extern PSI_cond_key key_COND_alarm, key_IO_CACHE_SHARE_cond,
@@ -60,7 +60,7 @@ extern PSI_thread_key key_thread_alarm;
extern mysql_mutex_t THR_LOCK_malloc, THR_LOCK_open, THR_LOCK_keycache;
extern mysql_mutex_t THR_LOCK_lock, THR_LOCK_isam, THR_LOCK_net;
-extern mysql_mutex_t THR_LOCK_charset, THR_LOCK_time;
+extern mysql_mutex_t THR_LOCK_charset;
#include <mysql/psi/mysql_file.h>