summaryrefslogtreecommitdiff
path: root/mysys/my_getsystime.c
diff options
context:
space:
mode:
authorunknown <monty@mysql.com/nosik.monty.fi>2007-08-01 22:59:05 +0300
committerunknown <monty@mysql.com/nosik.monty.fi>2007-08-01 22:59:05 +0300
commit0c9a3e597d329c5475d4fec0a6f95ac87d65ca19 (patch)
treeea014474c5b5d34f211415d0a43cbc13631ccdfc /mysys/my_getsystime.c
parentb59217ebbbb9c2869ab914805729b3ca57c976fa (diff)
downloadmariadb-git-0c9a3e597d329c5475d4fec0a6f95ac87d65ca19.tar.gz
Fixes Bug#30127: --debug-info no longer prints memory usage in mysql
Fixed compiler warnings, errors and link errors Fixed new bug on Solaris with gethrtime() Added --debug-check option to all mysql clients to print errors and memory leaks Added --debug-info to all clients. This now works as --debug-check but also prints memory and cpu usage BUILD/compile-solaris-sparc-debug: Remove old cpu options client/client_priv.h: Added OPT_DBUG_CHECK client/mysql.cc: --debug-info now prints memory usage Added --debug-check client/mysql_upgrade.c: --debug-info now prints memory usage Added --debug-check client/mysqladmin.cc: --debug-info now prints memory usage Added --debug-check client/mysqlbinlog.cc: --debug-info now prints memory usage Added --debug-check client/mysqlcheck.c: --debug-info now prints memory usage Added --debug-check client/mysqldump.c: --debug-info now prints memory usage Added --debug-check client/mysqlimport.c: --debug-info now prints memory usage Added --debug-check client/mysqlshow.c: --debug-info now prints memory usage Added --debug-check client/mysqlslap.c: --debug-info now prints memory usage Added --debug-check client/mysqltest.c: --debug-info now prints memory usage Added --debug-check include/my_sys.h: Added extra option to TERMINATE to not print statistics libmysql/libmysql.c: Fixed compiler warning mysql-test/mysql-test-run.pl: --debug-info -> --debug-check to not print memory usage mysys/my_getsystime.c: Moved fast time calculation to my_micro_time_and_time() Fixed bug in previous push related to HAVE_GETHRTIME mysys/my_init.c: Print not freed memory in my_end() if MY_CHECK_ERROR is given mysys/my_static.c: Cleanup mysys/safemalloc.c: Added extra option to TERMINATE to not print statistics sql/item_xmlfunc.cc: Fixed compiler warning sql/sql_test.cc: Fixed TERMINATE() call unittest/mysys/base64-t.c: Fixed link error unittest/mysys/bitmap-t.c: Fixed link error unittest/mysys/my_atomic-t.c: Fixed link error
Diffstat (limited to 'mysys/my_getsystime.c')
-rw-r--r--mysys/my_getsystime.c68
1 files changed, 40 insertions, 28 deletions
diff --git a/mysys/my_getsystime.c b/mysys/my_getsystime.c
index 17ba1232d7a..43bb6c08af9 100644
--- a/mysys/my_getsystime.c
+++ b/mysys/my_getsystime.c
@@ -17,11 +17,13 @@
/* thus to get the current time we should use the system function
with the highest possible resolution */
+#include "mysys_priv.h"
+#include "my_static.h"
+
#ifdef __NETWARE__
#include <nks/time.h>
#endif
-#include "mysys_priv.h"
ulonglong my_getsystime()
{
#ifdef HAVE_CLOCK_GETTIME
@@ -30,7 +32,6 @@ ulonglong my_getsystime()
return (ulonglong)tp.tv_sec*10000000+(ulonglong)tp.tv_nsec/100;
#elif defined(__WIN__)
LARGE_INTEGER t_cnt;
- struct timeval tv;
if (query_performance_frequency)
{
QueryPerformanceCounter(&t_cnt);
@@ -38,8 +39,7 @@ ulonglong my_getsystime()
t_cnt.QuadPart % query_performance_frequency * 10000000/
query_performance_frequency+query_performance_offset);
}
- gettimeofday(&tv,NULL);
- return (ulonglong)tv.tv_sec*10000000+(ulonglong)tv.tv_usec*10;
+ return 0;
#elif defined(__NETWARE__)
NXTime_t tm;
NXGetTime(NX_SINCE_1970, NX_NSECONDS, &tm);
@@ -62,26 +62,13 @@ ulonglong my_getsystime()
*/
-#define DELTA_FOR_SECONDS LL(500000000) /* Half a second */
-
time_t my_time(myf flags __attribute__((unused)))
{
+ time_t t;
#ifdef HAVE_GETHRTIME
- static hrtime_t prev_gethrtime= 0;
- static time_t cur_time= 0;
-
- hrtime_t cur_gethrtime;
- pthread_mutex_lock(&THR_LOCK_time);
- cur_gethrtime= gethrtime();
- if ((prev_gethrtime - cur_gethrtime) > DELTA_FOR_SECONDS)
- {
- cur_time= time(0);
- prev_gethrtime= cur_gethrtime;
- }
- pthread_mutex_unlock(&THR_LOCK_time);
- return cur_time;
+ (void) my_micro_time_and_time(&t);
+ return t;
#else
- time_t t;
/* The following loop is here beacuse time() may fail on some systems */
while ((t= time(0)) == (time_t) -1)
{
@@ -120,11 +107,12 @@ ulonglong my_micro_time()
#if defined(__WIN__)
if (query_performance_frequency)
{
- QueryPerformanceCounter(&newtime);
+ QueryPerformanceCounter((LARGE_INTEGER*) &newtime);
newtime/= (query_performance_frequency * 1000000);
}
else
- newtime= (GetTickCount() * 1000; /* GetTickCount only returns milliseconds */
+ newtime= (GetTickCount() * 1000); /* GetTickCount only returns milliseconds */
+ return newtime;
#elif defined(HAVE_GETHRTIME)
return gethrtime()/1000;
#else
@@ -133,13 +121,13 @@ ulonglong my_micro_time()
while (gettimeofday(&t, NULL) != 0)
{}
newtime= (ulonglong)t.tv_sec * 1000000 + t.tv_usec;
-#endif /* defined(__WIN__) */
return newtime;
+#endif /* defined(__WIN__) */
}
/*
- Return time in seconds and timer in microseconds
+ Return time in seconds and timer in microseconds (not different start!)
SYNOPSIS
my_micro_time_and_time()
@@ -152,24 +140,48 @@ ulonglong my_micro_time()
to measure the time of a query (for the slow query log)
IMPLEMENTATION
- Same as my_micro_time()
+ Value of time is as in time() call.
+ Value of microtime is same as my_micro_time(), which may be totally unrealated
+ to time()
RETURN
Value in microseconds from some undefined point in time
*/
+#define DELTA_FOR_SECONDS LL(500000000) /* Half a second */
+
ulonglong my_micro_time_and_time(time_t *time_arg)
{
ulonglong newtime;
#if defined(__WIN__)
if (query_performance_frequency)
{
- QueryPerformanceCounter((LARGE_INTEGER *) &newtime);
+ QueryPerformanceCounter((LARGE_INTEGER*) &newtime);
newtime/= (query_performance_frequency * 1000000);
}
else
- newtime= (GetTickCount() * 1000; /* GetTickCount only returns milliseconds */
+ newtime= (GetTickCount() * 1000); /* GetTickCount only returns milliseconds */
(void) time(time_arg);
+ return newtime;
+#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;
+
+ pthread_mutex_lock(&THR_LOCK_time);
+ cur_gethrtime= gethrtime();
+ if ((cur_gethrtime - prev_gethrtime) > DELTA_FOR_SECONDS)
+ {
+ cur_time= time(0);
+ prev_gethrtime= cur_gethrtime;
+ }
+ *time_arg= cur_time;
+ pthread_mutex_unlock(&THR_LOCK_time);
+ return cur_gethrtime/1000;
#else
struct timeval t;
/* The following loop is here because gettimeofday may fail on some systems */
@@ -177,8 +189,8 @@ ulonglong my_micro_time_and_time(time_t *time_arg)
{}
*time_arg= t.tv_sec;
newtime= (ulonglong)t.tv_sec * 1000000 + t.tv_usec;
-#endif /* defined(__WIN__) */
return newtime;
+#endif /* defined(__WIN__) */
}