Pantek Library
Hosting Provided By
CybrHost
High Speed Hosting

[patch 3/8] portlib for ndb on win32

From: <stewart(at)flamingspork.com>
Date: Wed Sep 19 2007 - 03:46:44 EDT


ooo bzr diff -r1 -pa/:b/ ndb/include/ ndb/src/common/portlib/ |di -X Make

--- a/ndb/include/kernel/ndb_limits.h	2007-08-29 07:25:53 +0000
+++ b/ndb/include/kernel/ndb_limits.h	2007-09-08 11:07:00 +0000
@@ -15,8 +15,8 @@  

#ifndef NDB_LIMITS_H
#define NDB_LIMITS_H

-

-#include 
+#include 
+#include 
 

#define RNIL 0xffffff00
 

  • a/ndb/include/ndb_global.h.in 2007-08-29 07:25:53 +0000 +++ b/ndb/include/ndb_global.h.in 2007-09-06 13:30:48 +0000 @@ -23,7 +23,7 @@

#if defined(_WIN32) || defined(_WIN64) || defined(__WIN32__) || defined(WIN32)
#define NDB_WIN32

-#include 
+#define NDB_WIN

#define PATH_MAX 256
#define DIR_SEPARATOR "\\"
#define MYSQLCLUSTERDIR "c:\\mysql\\mysql-cluster"
@@ -32,6 +32,7 @@
#pragma warning(disable: 4503 4786)
#else
#undef NDB_WIN32
+#undef NDB_WIN

#define DIR_SEPARATOR "/"
#endif
 
  • a/ndb/include/ndb_types.h.in 2007-08-29 07:25:53 +0000 +++ b/ndb/include/ndb_types.h.in 2007-09-07 13:53:50 +0000 @@ -20,22 +20,22 @@
    #ifndef NDB_TYPES_H
    #define NDB_TYPES_H
-#if defined(_WIN32) || defined(__WIN32__) || defined(WIN32) || defined(_WIN64)
-#define NDB_SIZEOF_CHARP SIZEOF_CHARP
-#define NDB_SIZEOF_CHAR SIZEOF_CHAR
-#define NDB_SIZEOF_SHORT 2
-#define NDB_SIZEOF_INT SIZEOF_INT
-#define NDB_SIZEOF_LONG SIZEOF_LONG
-#define NDB_SIZEOF_LONG_LONG SIZEOF_LONG_LONG
-typedef unsigned __int64 Uint64;
-typedef   signed __int64 Int64;
-#else

#define NDB_SIZEOF_CHARP @NDB_SIZEOF_CHARP@
#define NDB_SIZEOF_CHAR @NDB_SIZEOF_CHAR@
#define NDB_SIZEOF_INT @NDB_SIZEOF_INT@
#define NDB_SIZEOF_SHORT @NDB_SIZEOF_SHORT@
#define NDB_SIZEOF_LONG @NDB_SIZEOF_LONG@
#define NDB_SIZEOF_LONG_LONG @NDB_SIZEOF_LONG_LONG@
+
+#if defined(_WIN32) || defined(__WIN32__) || defined(WIN32) || defined(_WIN64)
+typedef unsigned __int64 Uint64;
+typedef   signed __int64 Int64;
+#define ssize_t SSIZE_T 
+#ifndef my_socket_defined
+#define my_socket SOCKET
+#define my_socket_defined
+#endif
+#else

 typedef unsigned long long Uint64;
 typedef signed long long Int64;
#endif
  • a/ndb/include/portlib/NdbDaemon.h 2007-08-29 07:25:53 +0000 +++ b/ndb/include/portlib/NdbDaemon.h 2007-09-08 06:00:59 +0000 @@ -31,6 +31,10 @@ extern int NdbDaemon_Make(const char* lockfile, const char* logfile, unsigned flags);
+typedef int(*F)(void*);
+extern int
+NdbDaemonService_Make(const char*argv0,const char* lockfile, const char* logfile, unsigned flags, F restofmain);
+
 /*
  * Test if the daemon is running (file is locked).
  * lockfile     the "pid file"

--- a/ndb/include/portlib/NdbMutex.h	2007-08-29 07:25:53 +0000
+++ b/ndb/include/portlib/NdbMutex.h	2007-09-08 13:35:49 +0000
@@ -18,11 +18,6 @@  

#include <ndb_global.h>
 

-#ifdef NDB_WIN32
-#include 
-#include 
-#endif
-

#ifdef __cplusplus

 extern "C" {
#endif

@@ -30,10 +25,8 @@
#if defined NDB_OSE || defined NDB_SOFTOSE
#include <ose.h>

 typedef SEMAPHORE NdbMutex;
-#elif defined NDB_WIN32
-typedef CRITICAL_SECTION NdbMutex;
#else

-#include <pthread.h>
+#include <my_pthread.h>
 typedef pthread_mutex_t NdbMutex;
#endif
 
  • a/ndb/include/portlib/NdbTCP.h 2007-08-29 07:25:53 +0000 +++ b/ndb/include/portlib/NdbTCP.h 2007-09-06 13:30:48 +0000 @@ -30,7 +30,7 @@
    #define NDB_NONBLOCK FNDELAY
    #define NDB_SOCKET_TYPE int
    #define NDB_INVALID_SOCKET -1
    -#define _NDB_CLOSE_SOCKET(x) close(x) +#define _NDB_CLOSE_SOCKET(x) socket_close(x)

 /**

  • socklen_t not defined in the header files of OSE @@ -41,12 +41,6 @@

#elif defined NDB_WIN32
 

-/**
- * Include files needed
- */
-#include 
-#include 
-

#define InetErrno WSAGetLastError()
#define EWOULDBLOCK WSAEWOULDBLOCK
#define NDB_SOCKET_TYPE SOCKET
  • a/ndb/include/util/NdbOut.hpp 2007-08-29 07:25:53 +0000 +++ b/ndb/include/util/NdbOut.hpp 2007-09-06 13:30:48 +0000 @@ -84,6 +84,9 @@ int isHex; };
+typedef int(*NdbOutF)(char*);
+extern NdbOutF ndbout_svc;
+

 inline NdbOut& NdbOut::operator<<(NdbOut& (* _f)(NdbOut&)) {    (* _f)(*this);
   return * this;
  • a/ndb/src/common/portlib/NdbCondition.c 2007-08-29 07:25:53 +0000 +++ b/ndb/src/common/portlib/NdbCondition.c 2007-09-16 12:55:19 +0000 @@ -26,8 +26,6 @@ pthread_cond_t cond; };

-
-
 struct NdbCondition*
 NdbCondition_Create(void)
 {
@@ -71,30 +69,8 @@    

Do you need help?X

   if (p_cond == NULL || p_mutex == NULL)      return 1;

-  
-#ifdef HAVE_CLOCK_GETTIME
-  clock_gettime(CLOCK_REALTIME, &abstime);
-#else
-  {
-    struct timeval tick_time;
-    gettimeofday(&tick_time, 0);
-    abstime.tv_sec  = tick_time.tv_sec;
-    abstime.tv_nsec = tick_time.tv_usec * 1000;
-  }
-#endif
-
-  if(msecs >= 1000){
-    secs  = msecs / 1000;
Do you need more help?X
- msecs = msecs % 1000; - } - - abstime.tv_sec += secs; - abstime.tv_nsec += msecs * 1000000; - if (abstime.tv_nsec >= 1000000000) { - abstime.tv_sec += 1; - abstime.tv_nsec -= 1000000000; - } -

+
+ set_timespec_nsec(abstime,msecs*1000000) ;

   result = pthread_cond_timedwait(&p_cond->cond, p_mutex, &abstime);    

   return result;
@@ -121,7 +97,7 @@

     return 1;  

   result = pthread_cond_broadcast(&p_cond->cond); -
+

   return result;
 }  

  • a/ndb/src/common/portlib/NdbConfig.c 2007-08-29 07:25:53 +0000 +++ b/ndb/src/common/portlib/NdbConfig.c 2007-09-09 09:06:04 +0000 @@ -79,7 +79,8 @@ if (node_id > 0) basestring_snprintf(tmp_buf, sizeof(tmp_buf), "ndb_%u", node_id); else - basestring_snprintf(tmp_buf, sizeof(tmp_buf), "ndb_pid%u", getpid()); + basestring_snprintf(tmp_buf, sizeof(tmp_buf), "ndb_pid%u", + NdbHost_GetProcessId()); tmp_buf[sizeof(tmp_buf)-1]= 0;

   buf= NdbConfig_AllocHomePath(len+strlen(tmp_buf));

  • a/ndb/src/common/portlib/NdbDaemon.c 2007-08-29 07:25:53 +0000 +++ b/ndb/src/common/portlib/NdbDaemon.c 2007-09-09 09:06:04 +0000 @@ -21,78 +21,101 @@ int NdbDaemon_ErrorCode = 0; char NdbDaemon_ErrorText[NdbDaemon_ErrorSize] = "";
+#ifdef NDB_WIN32
+#define F_ULOCK _LK_UNLCK
+#define F_LOCK _LK_LOCK
+#define F_TLOCK _LK_NBLCK
+#define lockf(fd,mode,size) _locking((fd),(mode),(size))
+#endif
+
+int restofmake(void*);
+struct Dstate 
+{ int lockfd,logfd;
+  const char*lockfile,*logfile;
+  F restofmain;
+} dstate;
+
+int nothing(void*p){return 0; }
+

 int
 NdbDaemon_Make(const char* lockfile, const char* logfile, unsigned flags)
+{ return NdbDaemonService_Make("",lockfile,logfile,flags,nothing); }
+
+int
+NdbDaemonService_Make(const char*argv0,const char* lockfile, const char* logfile, unsigned flags, F restofmain)
 {
- int lockfd = -1, logfd = -1, n;
+ int n;

   char buf[64];
-

+  dstate.lockfd = -1, dstate.logfd = -1;
+  dstate.lockfile=lockfile, dstate.logfile=logfile;
+  dstate.restofmain=restofmain;
Can we help you?X

   (void)flags; /* remove warning for unused parameter */  

   /* Check that we have write access to lock file */

-  assert(lockfile != NULL);
-  lockfd = open(lockfile, O_CREAT|O_RDWR, 0644);
-  if (lockfd == -1) {
+  assert(dstate.lockfile != NULL);
+  fopen(dstate.lockfile,"w");

+ dstate.lockfd = open(dstate.lockfile, O_CREAT|O_RDWR, 0644); + if (dstate.lockfd == -1) {

     NdbDaemon_ErrorCode = errno;
- snprintf(NdbDaemon_ErrorText, NdbDaemon_ErrorSize, - "%s: open for write failed: %s", lockfile, strerror(errno));

+    basestring_snprintf(NdbDaemon_ErrorText, NdbDaemon_ErrorSize,
+	"%s: open for write failed: %s", dstate.lockfile, strerror(errno));
+
     return -1;

   }
   /* Read any old pid from lock file */    buf[0] = 0;
- n = read(lockfd, buf, sizeof(buf));
+ n = read(dstate.lockfd, buf, sizeof(buf));

   if (n < 0) {
     NdbDaemon_ErrorCode = errno;
- snprintf(NdbDaemon_ErrorText, NdbDaemon_ErrorSize, - "%s: read failed: %s", lockfile, strerror(errno)); + basestring_snprintf(NdbDaemon_ErrorText, NdbDaemon_ErrorSize,

+	"%s: read failed: %s", dstate.lockfile, strerror(errno));
     return -1;

   }
   NdbDaemon_DaemonPid = atol(buf);
- if (lseek(lockfd, 0, SEEK_SET) == -1) { + if (lseek(dstate.lockfd, 0, SEEK_SET) == -1) {

     NdbDaemon_ErrorCode = errno;
- snprintf(NdbDaemon_ErrorText, NdbDaemon_ErrorSize, - "%s: lseek failed: %s", lockfile, strerror(errno)); + basestring_snprintf(NdbDaemon_ErrorText, NdbDaemon_ErrorSize,

+	"%s: lseek failed: %s", dstate.lockfile, strerror(errno));
     return -1;

   }
#ifdef F_TLOCK

   /* Test for lock before becoming daemon */ - if (lockf(lockfd, F_TLOCK, 0) == -1) + if (lockf(dstate.lockfd, F_TLOCK, 0) == -1)

   {

     if (errno == EACCES || errno == EAGAIN) {   /* results may vary */
-      snprintf(NdbDaemon_ErrorText, NdbDaemon_ErrorSize,
-	       "%s: already locked by pid=%ld", lockfile, NdbDaemon_DaemonPid);
+      basestring_snprintf(NdbDaemon_ErrorText, NdbDaemon_ErrorSize,
+	       "%s: already locked by pid=%ld", dstate.lockfile, NdbDaemon_DaemonPid);
       return -1;
     }
     NdbDaemon_ErrorCode = errno;
-    snprintf(NdbDaemon_ErrorText, NdbDaemon_ErrorSize,
Can't find what you're looking for?X
- "%s: lock test failed: %s", lockfile, strerror(errno)); + basestring_snprintf(NdbDaemon_ErrorText, NdbDaemon_ErrorSize, + "%s: lock test failed: %s", dstate.lockfile, strerror(errno)); return -1;

   }
#endif

   /* Test open log file before becoming daemon */
-  if (logfile != NULL) {
-    logfd = open(logfile, O_CREAT|O_WRONLY|O_APPEND, 0644);
-    if (logfd == -1) {
+  if (dstate.logfile != NULL) {

+ dstate.logfd = open(dstate.logfile, O_CREAT|O_WRONLY|O_APPEND, 0644); + if (dstate.logfd == -1) {
       NdbDaemon_ErrorCode = errno;
-      snprintf(NdbDaemon_ErrorText, NdbDaemon_ErrorSize,
-	  "%s: open for write failed: %s", logfile, strerror(errno));
+      basestring_snprintf(NdbDaemon_ErrorText, NdbDaemon_ErrorSize,
+	  "%s: open for write failed: %s", dstate.logfile, strerror(errno));
       return -1;
     }

   }
#ifdef F_TLOCK

- if (lockf(lockfd, F_ULOCK, 0) == -1) + if (lockf(dstate.lockfd, F_ULOCK, 0) == -1)

   {
- snprintf(NdbDaemon_ErrorText, NdbDaemon_ErrorSize, - "%s: fail to unlock", lockfile);
+ basestring_snprintf(NdbDaemon_ErrorText, NdbDaemon_ErrorSize,

+	     "%s: fail to unlock", dstate.lockfile);
     return -1;

   }
#endif

-
- /* Fork */
+#ifndef NDB_WIN32

   n = fork();
   if (n == -1) {
     NdbDaemon_ErrorCode = errno;
- snprintf(NdbDaemon_ErrorText, NdbDaemon_ErrorSize, + basestring_snprintf(NdbDaemon_ErrorText, NdbDaemon_ErrorSize,

 	"fork failed: %s", strerror(errno));
     return -1;

   }
@@ -100,66 +123,67 @@
Don't know where to look next?X

   if (n != 0) {
     exit(0);
   }

-  /* Running in child process */
-  NdbDaemon_DaemonPid = getpid();
-  /* Lock the lock file (likely to succeed due to test above) */
-  if (lockf(lockfd, F_LOCK, 0) == -1) {
-    NdbDaemon_ErrorCode = errno;
-    snprintf(NdbDaemon_ErrorText, NdbDaemon_ErrorSize,
-	"%s: lock failed: %s", lockfile, strerror(errno));
-    return -1;
+#endif
+  {
+    char buf[64];int n;
+    /* Running in child process */
+    NdbDaemon_DaemonPid = NdbHost_GetProcessId();
+    /* Lock the lock file (likely to succeed due to test above) */
+    if (lockf(dstate.lockfd, F_LOCK, 0) == -1) {
+	NdbDaemon_ErrorCode = errno;
+	basestring_snprintf(NdbDaemon_ErrorText, NdbDaemon_ErrorSize,
+	    "%s: lock failed: %s", dstate.lockfile, strerror(errno));
+	return -1;

   }
+#ifndef NDB_WIN32

   /* Become process group leader */
   if (setsid() == -1) {
     NdbDaemon_ErrorCode = errno;
- snprintf(NdbDaemon_ErrorText, NdbDaemon_ErrorSize, + basestring_snprintf(NdbDaemon_ErrorText, NdbDaemon_ErrorSize,

 	"setsid failed: %s", strerror(errno));
     return -1;

   }
   /* Write pid to lock file */
- if (ftruncate(lockfd, 0) == -1) {
+  if (ftruncate(dstate.lockfd, 0) == -1) {
+#else
+  if (_chsize(dstate.lockfd, 0) == -1) {
+#endif
     NdbDaemon_ErrorCode = errno;
-    snprintf(NdbDaemon_ErrorText, NdbDaemon_ErrorSize,
Confused? Frustrated?X
- "%s: ftruncate failed: %s", lockfile, strerror(errno)); + basestring_snprintf(NdbDaemon_ErrorText, NdbDaemon_ErrorSize, + "%s: ftruncate failed: %s", dstate.lockfile, strerror(errno)); return -1;

   }
   sprintf(buf, "%ld\n", NdbDaemon_DaemonPid);    n = strlen(buf);
- if (write(lockfd, buf, n) != n) {
+ if (write(dstate.lockfd, buf, n) != n) {

     NdbDaemon_ErrorCode = errno;
- snprintf(NdbDaemon_ErrorText, NdbDaemon_ErrorSize, - "%s: write failed: %s", lockfile, strerror(errno)); + basestring_snprintf(NdbDaemon_ErrorText, NdbDaemon_ErrorSize,

+	"%s: write failed: %s", dstate.lockfile, strerror(errno));
     return -1;

   }
   /* Do input/output redirections (assume fd 0,1,2 not in use) */    close(0);
+#ifndef NDB_WIN32

   open("/dev/null", O_RDONLY);

-  if (logfile != 0) {
-    dup2(logfd, 1);
-    dup2(logfd, 2);
-    close(logfd);
+#else
+  open("nul:", O_RDONLY);
+#endif
+  if (dstate.logfile != 0) {
+    dup2(dstate.logfd, 1);

+ dup2(dstate.logfd, 2);
+ close(dstate.logfd);

   }
   /* Success */

-  return 0;
-}
-
-#if 0
-int
-NdbDaemon_Make(const char* lockfile, const char* logfile, unsigned flags)
-{
-  /* Fail */
-  snprintf(NdbDaemon_ErrorText, NdbDaemon_ErrorSize,
-	   "Daemon mode not implemented");
-  return -1;
-}
-#endif
+  return dstate.restofmain(0);

+ }
+}  

#ifdef NDB_DAEMON_TEST

-
+int daemontest(void*p){return p==0;}
 int
-main()
+main(int argc, char**argv)
 {
- if (NdbDaemon_Make("test.pid", "test.log", 0) == -1) { + if (NdbDaemon_Make(argv[0],"test.pid", "test.log", 0,daemontest) == -1) {

     fprintf(stderr, "NdbDaemon_Make: %s\n", NdbDaemon_ErrorText);
     return 1;

   }
  • a/ndb/src/common/portlib/NdbHost.c 2007-08-29 07:25:53 +0000 +++ b/ndb/src/common/portlib/NdbHost.c 2007-09-09 09:06:04 +0000 @@ -19,13 +19,15 @@

 int NdbHost_GetHostName(char* buf)
 {

-  if (gethostname(buf, MAXHOSTNAMELEN) != 0)
-  {     
-     return -1;
-   }

+ if(gethostname(buf, MAXHOSTNAMELEN))
+ return -1;
Call Pantek today for Open Source Technical Support at 1-877-546-8934 - 24/7/365X

   return 0;
 }  

+#ifdef NDB_WIN
+#include 
+#define getpid _getpid
+#endif

 int NdbHost_GetProcessId(void)
 {
   return getpid();
  • a/ndb/src/common/portlib/NdbMutex.c 2007-08-29 07:25:53 +0000 +++ b/ndb/src/common/portlib/NdbMutex.c 2007-09-09 09:06:04 +0000 @@ -17,6 +17,7 @@
    #include <ndb_global.h>

#include <NdbThread.h>

+#include 

#include <NdbMutex.h>
#include <NdbMem.h>
 
  • a/ndb/src/common/portlib/NdbPortLibTest.cpp 2007-08-29 07:25:53 +0000 +++ b/ndb/src/common/portlib/NdbPortLibTest.cpp 2007-09-09 09:06:04 +0000 @@ -53,7 +53,7 @@ if (arg1 != 7) fail("TEST1", "Wrong arg");
    • return returnvalue; + return (void*) returnvalue; }

 // test 2 variables and funcs
@@ -76,7 +76,7 @@

     fail("TEST2", "Failed to unlock mutex");  

   int returnvalue = arg1;
- return returnvalue;
+ return (void*) returnvalue;
 }    

  • a/ndb/src/common/portlib/NdbSleep.c 2007-08-29 07:25:53 +0000 +++ b/ndb/src/common/portlib/NdbSleep.c 2007-09-09 09:06:04 +0000 @@ -19,24 +19,16 @@
    #include <NdbSleep.h>

 int
-NdbSleep_MilliSleep(int milliseconds){
- my_sleep(milliseconds*1000);

+NdbSleep_MilliSleep(int milliseconds)
+{
+  my_sleep(milliseconds);

   return 0;

-#if 0
-  int result = 0;
-  struct timespec sleeptime;
-  sleeptime.tv_sec = milliseconds / 1000;
-  sleeptime.tv_nsec = (milliseconds - (sleeptime.tv_sec * 1000)) * 1000000;
-  result = nanosleep(&sleeptime, NULL);
-  return result;
-#endif

 }  

 int

-NdbSleep_SecSleep(int seconds){
-  int result = 0;
-  result = sleep(seconds);
-  return result;
+NdbSleep_SecSleep(int seconds)

+{
+ return NdbSleep_MilliSleep(seconds*1000);  }    
  • a/ndb/src/common/portlib/NdbTCP.cpp 2007-08-29 07:25:53 +0000 +++ b/ndb/src/common/portlib/NdbTCP.cpp 2007-09-10 08:04:49 +0000 @@ -21,7 +21,6 @@ extern "C" int Ndb_getInAddr(struct in_addr * dst, const char *address) { - // DBUG_ENTER("Ndb_getInAddr"); { int tmp_errno; struct hostent tmp_hostent, *hp; @@ -32,7 +31,7 @@ { memcpy(dst, hp->h_addr, min(sizeof(*dst), (size_t) hp->h_length)); my_gethostbyname_r_free(); - return 0; //DBUG_RETURN(0); + return 0; } my_gethostbyname_r_free(); } @@ -46,13 +45,12 @@
    #endif
    ) { - return 0; //DBUG_RETURN(0); + return 0; } - // DBUG_PRINT("error",("inet_addr(%s) - %d - %s", - // address, errno, strerror(errno))); - return -1; //DBUG_RETURN(-1); + DBUG_PRINT("error",("inet_addr(%s) - %d - %s", + address, socket_errno, strerror(socket_errno))); + return -1; } -
    #ifndef DBUG_OFF
    extern "C" int NDB_CLOSE_SOCKET(int fd) @@ -61,7 +59,6 @@ return _NDB_CLOSE_SOCKET(fd); }
    #endif
    -
    #if 0
    int Ndb_getInAddr(struct in_addr * dst, const char *address) { @@ -111,7 +108,7 @@ FD_SET(sock, &writefds); FD_SET(sock, &errorfds);
    • if(select(1, &readfds, &writefds, &errorfds, &tv)<0) + if(select(sock+1, &readfds, &writefds, &errorfds, &tv)<0) return 1;
Do you need help?X

   if(FD_ISSET(sock,&errorfds))

  • a/ndb/src/common/portlib/NdbThread.c 2007-08-29 07:25:53 +0000 +++ b/ndb/src/common/portlib/NdbThread.c 2007-09-16 12:55:19 +0000 @@ -28,7 +28,7 @@
    #endif

 struct NdbThread
-{
+{

   pthread_t thread;
   char thread_name[MAX_THREAD_NAME];
   NDB_THREAD_FUNC * func;
@@ -41,6 +41,7 @@

   my_thread_init();
   {
     DBUG_ENTER("ndb_thread_wrapper");
+#ifndef NDB_WIN32
#ifdef NDB_SHM_TRANSPORTER

     if (g_ndb_shm_signum)
     {
@@ -60,6 +61,7 @@
       sigfillset(&mask);
       pthread_sigmask(SIG_BLOCK, &mask, 0);
     }      
+#endif
     
     {
       void *ret;

--- a/ndb/src/common/portlib/NdbTick.c	2007-08-29 07:25:53 +0000
+++ b/ndb/src/common/portlib/NdbTick.c	2007-09-09 09:06:04 +0000
Do you need more help?X
@@ -24,7 +24,26 @@
#define MILLISEC_PER_NANOSEC 1000000
   

-#ifdef HAVE_CLOCK_GETTIME

+#ifdef NDB_WIN32
+NDB_TICKS NdbTick_CurrentMillisecond(void)
+{
+  NDB_TICKS sec;Uint32 usec;
+  NdbTick_CurrentMicrosecond(&sec,&usec);
+  return sec*1000+usec/1000;
+}
+
+int 
+NdbTick_CurrentMicrosecond(NDB_TICKS * secs, Uint32 * micros)
+{
+  LARGE_INTEGER liCount, liFreq;
+  QueryPerformanceCounter(&liCount);
+  QueryPerformanceFrequency(&liFreq);
+  *secs = liCount.QuadPart / liFreq.QuadPart;
+  liCount.QuadPart -= *secs * liFreq.QuadPart;
+  *micros = (liCount.QuadPart*1000000) / liFreq.QuadPart;
+  return 0;
+}
+#elif defined(HAVE_CLOCK_GETTIME)

 NDB_TICKS NdbTick_CurrentMillisecond(void)  {
   struct timespec tick_time;
--
Stewart Smith

-- 
MySQL Code Commits Mailing List
For list archives: 
http://lists.mysql.com/commits
To unsubscribe:    
http://lists.mysql.com/commits?unsub=lists@pantek.com
Received on Wed Sep 19 04:12:08 2007

This archive was generated by hypermail 2.1.8 : Sun Oct 07 2007 - 09:32:57 EDT


Contact Us  Legal Notices  Order Services Online 
Pantek Home  Privacy Policy  IT news  Site Map  Pantek Library