List:Commits« Previous MessageNext Message »
From:Marc Alff Date:November 9 2011 11:55pm
Subject:bzr push into mysql-trunk-pfs-tuning branch (marc.alff:3439 to 3440)
View as plain text  
 3440 Marc Alff	2011-11-09
      Performance optimization

    modified:
      include/mysql/psi/mysql_socket.h
 3439 Marc Alff	2011-11-09
      Fixed build break w/o pfs

    modified:
      sql/sql_class.h
=== modified file 'include/mysql/psi/mysql_socket.h'
--- a/include/mysql/psi/mysql_socket.h	2011-11-08 23:28:12 +0000
+++ b/include/mysql/psi/mysql_socket.h	2011-11-09 23:54:36 +0000
@@ -120,7 +120,8 @@ mysql_socket_set_address(
 )
 {
 #ifdef HAVE_PSI_SOCKET_INTERFACE
-  PSI_CALL(set_socket_info)(socket.m_psi, NULL, addr, addr_len);
+  if (socket.m_psi != NULL)
+    PSI_CALL(set_socket_info)(socket.m_psi, NULL, addr, addr_len);
 #endif
 }
 
@@ -139,7 +140,8 @@ MYSQL_SOCKET socket __attribute__ ((unus
 )
 {
 #ifdef HAVE_PSI_SOCKET_INTERFACE
-  PSI_CALL(set_socket_thread_owner)(socket.m_psi);
+  if (socket.m_psi != NULL)
+    PSI_CALL(set_socket_thread_owner)(socket.m_psi);
 #endif
 }
 
@@ -243,8 +245,13 @@ inline_mysql_start_socket_wait(PSI_socke
                                const char *src_file, int src_line)
 {
   struct PSI_socket_locker *locker;
-  locker= PSI_CALL(start_socket_wait)(state, mysql_socket.m_psi, op,
-                                      byte_count, src_file, src_line);
+  if (mysql_socket.m_psi != NULL)
+  {
+    locker= PSI_CALL(start_socket_wait)(state, mysql_socket.m_psi, op,
+                                        byte_count, src_file, src_line);
+  }
+  else
+    locker= NULL;
   return locker;
 }
 
@@ -255,7 +262,8 @@ inline_mysql_start_socket_wait(PSI_socke
 static inline void
 inline_mysql_end_socket_wait(struct PSI_socket_locker *locker, size_t byte_count)
 {
-  PSI_CALL(end_socket_wait)(locker, byte_count);
+  if (locker != NULL)
+    PSI_CALL(end_socket_wait)(locker, byte_count);
 }
 
 /**
@@ -267,7 +275,8 @@ inline_mysql_end_socket_wait(struct PSI_
 static inline void
 inline_mysql_socket_set_state(MYSQL_SOCKET socket, enum PSI_socket_state state)
 {
-  PSI_CALL(set_socket_state)(socket.m_psi, state);
+  if (socket.m_psi != NULL)
+    PSI_CALL(set_socket_state)(socket.m_psi, state);
 }
 #endif /* HAVE_PSI_SOCKET_INTERFACE */
 
@@ -568,23 +577,28 @@ inline_mysql_socket_bind
 {
   int result;
 
-  /* Instrumentation start */
 #ifdef HAVE_PSI_SOCKET_INTERFACE
-  PSI_socket_locker_state state;
-  struct PSI_socket_locker *locker;
-  locker= PSI_CALL(start_socket_wait)(&state, mysql_socket.m_psi,
-                                      PSI_SOCKET_BIND, (size_t)0, src_file, src_line);
-#endif
+  if (mysql_socket.m_psi != NULL)
+  {
+    /* Instrumentation start */
+    PSI_socket_locker_state state;
+    PSI_socket_locker *locker;
+    locker= PSI_CALL(start_socket_wait)(&state, mysql_socket.m_psi,
+                                        PSI_SOCKET_BIND, (size_t)0, src_file, src_line);
+
+    /* Instrumented code */
+    result= bind(mysql_socket.fd, addr, len);
+
+    /* Instrumentation end */
+    PSI_CALL(set_socket_info)(mysql_socket.m_psi, NULL, addr, len);
+    PSI_CALL(end_socket_wait)(locker, (size_t)0);
 
-  /* Instrumented code */
-  result= bind(mysql_socket.fd, addr, len);
-
-  /* Instrumentation end */
-#ifdef HAVE_PSI_SOCKET_INTERFACE
-  PSI_CALL(set_socket_info)(mysql_socket.m_psi, NULL, addr, len);
-  PSI_CALL(end_socket_wait)(locker, (size_t)0);
+    return result;
+  }
 #endif
 
+  /* Non instrumented code */
+  result= bind(mysql_socket.fd, addr, len);
   return result;
 }
 
@@ -600,22 +614,28 @@ inline_mysql_socket_getsockname
 {
   int result;
 
-  /* Instrumentation start */
 #ifdef HAVE_PSI_SOCKET_INTERFACE
-  struct PSI_socket_locker *locker;
-  PSI_socket_locker_state state;
-  locker= PSI_CALL(start_socket_wait)(&state, mysql_socket.m_psi,
-                                      PSI_SOCKET_BIND, (size_t)0, src_file, src_line);
-#endif
+  if (mysql_socket.m_psi != NULL)
+  {
+    /* Instrumentation start */
+    PSI_socket_locker *locker;
+    PSI_socket_locker_state state;
+    locker= PSI_CALL(start_socket_wait)(&state, mysql_socket.m_psi,
+                                        PSI_SOCKET_BIND, (size_t)0, src_file, src_line);
 
-  /* Instrumented code */
-  result= getsockname(mysql_socket.fd, addr, len);
+    /* Instrumented code */
+    result= getsockname(mysql_socket.fd, addr, len);
 
-  /* Instrumentation end */
-#ifdef HAVE_PSI_SOCKET_INTERFACE
-  PSI_CALL(end_socket_wait)(locker, (size_t)0);
+    /* Instrumentation end */
+    PSI_CALL(end_socket_wait)(locker, (size_t)0);
+
+    return result;
+  }
 #endif
 
+  /* Non instrumented code */
+  result= getsockname(mysql_socket.fd, addr, len);
+
   return result;
 }
 
@@ -631,22 +651,28 @@ inline_mysql_socket_connect
 {
   int result;
 
-  /* Instrumentation start */
 #ifdef HAVE_PSI_SOCKET_INTERFACE
-  struct PSI_socket_locker *locker;
-  PSI_socket_locker_state state;
-  locker= PSI_CALL(start_socket_wait)(&state, mysql_socket.m_psi,
-                                      PSI_SOCKET_CONNECT, (size_t)0, src_file, src_line);
-#endif
+  if (mysql_socket.m_psi != NULL)
+  {
+    /* Instrumentation start */
+    PSI_socket_locker *locker;
+    PSI_socket_locker_state state;
+    locker= PSI_CALL(start_socket_wait)(&state, mysql_socket.m_psi,
+                                        PSI_SOCKET_CONNECT, (size_t)0, src_file, src_line);
 
-  /* Instrumented code */
-  result= connect(mysql_socket.fd, addr, len);
+    /* Instrumented code */
+    result= connect(mysql_socket.fd, addr, len);
 
-  /* Instrumentation end */
-#ifdef HAVE_PSI_SOCKET_INTERFACE
-  PSI_CALL(end_socket_wait)(locker, (size_t)0);
+    /* Instrumentation end */
+    PSI_CALL(end_socket_wait)(locker, (size_t)0);
+
+    return result;
+  }
 #endif
 
+  /* Non instrumented code */
+  result= connect(mysql_socket.fd, addr, len);
+
   return result;
 }
 
@@ -662,22 +688,28 @@ inline_mysql_socket_getpeername
 {
   int result;
 
-  /* Instrumentation start */
 #ifdef HAVE_PSI_SOCKET_INTERFACE
-  struct PSI_socket_locker *locker;
-  PSI_socket_locker_state state;
-  locker= PSI_CALL(start_socket_wait)(&state, mysql_socket.m_psi,
-                                      PSI_SOCKET_BIND, (size_t)0, src_file, src_line);
-#endif
+  if (mysql_socket.m_psi != NULL)
+  {
+    /* Instrumentation start */
+    PSI_socket_locker *locker;
+    PSI_socket_locker_state state;
+    locker= PSI_CALL(start_socket_wait)(&state, mysql_socket.m_psi,
+                                        PSI_SOCKET_BIND, (size_t)0, src_file, src_line);
 
-  /* Instrumented code */
-  result= getpeername(mysql_socket.fd, addr, len);
+    /* Instrumented code */
+    result= getpeername(mysql_socket.fd, addr, len);
 
-  /* Instrumentation end */
-#ifdef HAVE_PSI_SOCKET_INTERFACE
-  PSI_CALL(end_socket_wait)(locker, (size_t)0);
+    /* Instrumentation end */
+    PSI_CALL(end_socket_wait)(locker, (size_t)0);
+
+    return result;
+  }
 #endif
 
+  /* Non instrumented code */
+  result= getpeername(mysql_socket.fd, addr, len);
+
   return result;
 }
 
@@ -693,24 +725,30 @@ inline_mysql_socket_send
 {
   ssize_t result;
 
-  /* Instrumentation start */
 #ifdef HAVE_PSI_SOCKET_INTERFACE
-  struct PSI_socket_locker *locker;
-  PSI_socket_locker_state state;
-  size_t bytes_written;
-  locker= PSI_CALL(start_socket_wait)(&state, mysql_socket.m_psi,
-                                      PSI_SOCKET_SEND, n, src_file, src_line);
+  if (mysql_socket.m_psi != NULL)
+  {
+    /* Instrumentation start */
+    PSI_socket_locker *locker;
+    PSI_socket_locker_state state;
+    size_t bytes_written;
+    locker= PSI_CALL(start_socket_wait)(&state, mysql_socket.m_psi,
+                                        PSI_SOCKET_SEND, n, src_file, src_line);
+
+    /* Instrumented code */
+    result= send(mysql_socket.fd, buf, n, flags);
+
+    /* Instrumentation end */
+    bytes_written= (result > -1) ? result : 0;
+    PSI_CALL(end_socket_wait)(locker, bytes_written);
+
+    return result;
+  }
 #endif
 
-  /* Instrumented code */
+  /* Non instrumented code */
   result= send(mysql_socket.fd, buf, n, flags);
 
-  /* Instrumentation end */
-#ifdef HAVE_PSI_SOCKET_INTERFACE
-  bytes_written= (result > -1) ? result : 0;
-  PSI_CALL(end_socket_wait)(locker, bytes_written);
-#endif
-
   return result;
 }
 
@@ -726,24 +764,30 @@ inline_mysql_socket_recv
 {
   ssize_t result;
 
-  /* Instrumentation start */
 #ifdef HAVE_PSI_SOCKET_INTERFACE
-  struct PSI_socket_locker *locker;
-  PSI_socket_locker_state state;
-  size_t bytes_read;
-  locker= PSI_CALL(start_socket_wait)(&state, mysql_socket.m_psi,
-                                      PSI_SOCKET_RECV, (size_t)0, src_file, src_line);
+  if (mysql_socket.m_psi != NULL)
+  {
+    /* Instrumentation start */
+    PSI_socket_locker *locker;
+    PSI_socket_locker_state state;
+    size_t bytes_read;
+    locker= PSI_CALL(start_socket_wait)(&state, mysql_socket.m_psi,
+                                        PSI_SOCKET_RECV, (size_t)0, src_file, src_line);
+
+    /* Instrumented code */
+    result= recv(mysql_socket.fd, buf, n, flags);
+
+    /* Instrumentation end */
+    bytes_read= (result > -1) ? result : 0;
+    PSI_CALL(end_socket_wait)(locker, bytes_read);
+
+    return result;
+  }
 #endif
 
-  /* Instrumented code */
+  /* Non instrumented code */
   result= recv(mysql_socket.fd, buf, n, flags);
 
-  /* Instrumentation end */
-#ifdef HAVE_PSI_SOCKET_INTERFACE
-  bytes_read= (result > -1) ? result : 0;
-  PSI_CALL(end_socket_wait)(locker, bytes_read);
-#endif
-
   return result;
 }
 
@@ -759,24 +803,30 @@ inline_mysql_socket_sendto
 {
   ssize_t result;
 
-  /* Instrumentation start */
 #ifdef HAVE_PSI_SOCKET_INTERFACE
-  struct PSI_socket_locker *locker;
-  PSI_socket_locker_state state;
-  size_t bytes_written;
-  locker= PSI_CALL(start_socket_wait)(&state, mysql_socket.m_psi,
-                                      PSI_SOCKET_SEND, n, src_file, src_line);
+  if (mysql_socket.m_psi != NULL)
+  {
+    /* Instrumentation start */
+    PSI_socket_locker *locker;
+    PSI_socket_locker_state state;
+    size_t bytes_written;
+    locker= PSI_CALL(start_socket_wait)(&state, mysql_socket.m_psi,
+                                        PSI_SOCKET_SEND, n, src_file, src_line);
+
+    /* Instrumented code */
+    result= sendto(mysql_socket.fd, buf, n, flags, addr, addr_len);
+
+    /* Instrumentation end */
+    bytes_written = (result > -1) ? result : 0;
+    PSI_CALL(end_socket_wait)(locker, bytes_written);
+
+    return result;
+  }
 #endif
 
-  /* Instrumented code */
+  /* Non instrumented code */
   result= sendto(mysql_socket.fd, buf, n, flags, addr, addr_len);
 
-  /* Instrumentation end */
-#ifdef HAVE_PSI_SOCKET_INTERFACE
-  bytes_written = (result > -1) ? result : 0;
-  PSI_CALL(end_socket_wait)(locker, bytes_written);
-#endif
-
   return result;
 }
 
@@ -793,24 +843,30 @@ inline_mysql_socket_recvfrom
 {
   ssize_t result;
 
-  /* Instrumentation start */
 #ifdef HAVE_PSI_SOCKET_INTERFACE
-  struct PSI_socket_locker *locker;
-  PSI_socket_locker_state state;
-  size_t bytes_read;
-  locker= PSI_CALL(start_socket_wait)(&state, mysql_socket.m_psi,
-                                      PSI_SOCKET_RECV, (size_t)0, src_file, src_line);
+  if (mysql_socket.m_psi != NULL)
+  {
+    /* Instrumentation start */
+    PSI_socket_locker *locker;
+    PSI_socket_locker_state state;
+    size_t bytes_read;
+    locker= PSI_CALL(start_socket_wait)(&state, mysql_socket.m_psi,
+                                        PSI_SOCKET_RECV, (size_t)0, src_file, src_line);
+
+    /* Instrumented code */
+    result= recvfrom(mysql_socket.fd, buf, n, flags, addr, addr_len);
+
+    /* Instrumentation end */
+    bytes_read = (result > -1) ? result : 0;
+    PSI_CALL(end_socket_wait)(locker, bytes_read);
+
+    return result;
+  }
 #endif
 
-  /* Instrumented code */
+  /* Non instrumented code */
   result= recvfrom(mysql_socket.fd, buf, n, flags, addr, addr_len);
 
-  /* Instrumentation end */
-#ifdef HAVE_PSI_SOCKET_INTERFACE
-  bytes_read = (result > -1) ? result : 0;
-  PSI_CALL(end_socket_wait)(locker, bytes_read);
-#endif
-
   return result;
 }
 
@@ -826,22 +882,28 @@ inline_mysql_socket_getsockopt
 {
   int result;
 
-  /* Instrumentation start */
 #ifdef HAVE_PSI_SOCKET_INTERFACE
-  struct PSI_socket_locker *locker;
-  PSI_socket_locker_state state;
-  locker= PSI_CALL(start_socket_wait)(&state, mysql_socket.m_psi,
-                                      PSI_SOCKET_OPT, (size_t)0, src_file, src_line);
-#endif
+  if (mysql_socket.m_psi != NULL)
+  {
+    /* Instrumentation start */
+    PSI_socket_locker *locker;
+    PSI_socket_locker_state state;
+    locker= PSI_CALL(start_socket_wait)(&state, mysql_socket.m_psi,
+                                        PSI_SOCKET_OPT, (size_t)0, src_file, src_line);
 
-  /* Instrumented code */
-  result= getsockopt(mysql_socket.fd, level, optname, optval, optlen);
+    /* Instrumented code */
+    result= getsockopt(mysql_socket.fd, level, optname, optval, optlen);
 
-  /* Instrumentation end */
-#ifdef HAVE_PSI_SOCKET_INTERFACE
-  PSI_CALL(end_socket_wait)(locker, (size_t)0);
+    /* Instrumentation end */
+    PSI_CALL(end_socket_wait)(locker, (size_t)0);
+
+    return result;
+  }
 #endif
 
+  /* Non instrumented code */
+  result= getsockopt(mysql_socket.fd, level, optname, optval, optlen);
+
   return result;
 }
 
@@ -858,22 +920,28 @@ inline_mysql_socket_setsockopt
 {
   int result;
 
-  /* Instrumentation start */
 #ifdef HAVE_PSI_SOCKET_INTERFACE
-  struct PSI_socket_locker *locker;
-  PSI_socket_locker_state state;
-  locker= PSI_CALL(start_socket_wait)(&state, mysql_socket.m_psi,
-                                      PSI_SOCKET_OPT, (size_t)0, src_file, src_line);
-#endif
+  if (mysql_socket.m_psi)
+  {
+    /* Instrumentation start */
+    PSI_socket_locker *locker;
+    PSI_socket_locker_state state;
+    locker= PSI_CALL(start_socket_wait)(&state, mysql_socket.m_psi,
+                                        PSI_SOCKET_OPT, (size_t)0, src_file, src_line);
 
-  /* Instrumented code */
-  result= setsockopt(mysql_socket.fd, level, optname, optval, optlen);
+    /* Instrumented code */
+    result= setsockopt(mysql_socket.fd, level, optname, optval, optlen);
 
-  /* Instrumentation end */
-#ifdef HAVE_PSI_SOCKET_INTERFACE
-  PSI_CALL(end_socket_wait)(locker, (size_t)0);
+    /* Instrumentation end */
+    PSI_CALL(end_socket_wait)(locker, (size_t)0);
+
+    return result;
+  }
 #endif
 
+  /* Non instrumented code */
+  result= setsockopt(mysql_socket.fd, level, optname, optval, optlen);
+
   return result;
 }
 
@@ -889,22 +957,28 @@ inline_mysql_socket_listen
 {
   int result;
 
-  /* Instrumentation start */
 #ifdef HAVE_PSI_SOCKET_INTERFACE
-  struct PSI_socket_locker *locker;
-  PSI_socket_locker_state state;
-  locker= PSI_CALL(start_socket_wait)(&state, mysql_socket.m_psi,
-                                      PSI_SOCKET_CONNECT, (size_t)0, src_file, src_line);
-#endif
+  if (mysql_socket.m_psi != NULL)
+  {
+    /* Instrumentation start */
+    PSI_socket_locker *locker;
+    PSI_socket_locker_state state;
+    locker= PSI_CALL(start_socket_wait)(&state, mysql_socket.m_psi,
+                                        PSI_SOCKET_CONNECT, (size_t)0, src_file, src_line);
 
-  /* Instrumented code */
-  result= listen(mysql_socket.fd, backlog);
+    /* Instrumented code */
+    result= listen(mysql_socket.fd, backlog);
 
-  /* Instrumentation end */
-#ifdef HAVE_PSI_SOCKET_INTERFACE
-  PSI_CALL(end_socket_wait)(locker, (size_t)0);
+    /* Instrumentation end */
+    PSI_CALL(end_socket_wait)(locker, (size_t)0);
+
+    return result;
+  }
 #endif
 
+  /* Non instrumented code */
+  result= listen(mysql_socket.fd, backlog);
+
   return result;
 }
 
@@ -921,27 +995,37 @@ inline_mysql_socket_accept
   MYSQL_SOCKET socket_accept= MYSQL_INVALID_SOCKET;
   socklen_t addr_length= (addr_len != NULL) ? *addr_len : 0;
 
-  /* Instrumentation start */
 #ifdef HAVE_PSI_SOCKET_INTERFACE
-  struct PSI_socket_locker *locker;
-  PSI_socket_locker_state state;
-  locker= PSI_CALL(start_socket_wait)(&state, socket_listen.m_psi,
-                                      PSI_SOCKET_CONNECT, (size_t)0, src_file, src_line);
-#endif
+  if (socket_listen.m_psi != NULL)
+  {
+    /* Instrumentation start */
+    PSI_socket_locker *locker;
+    PSI_socket_locker_state state;
+    locker= PSI_CALL(start_socket_wait)(&state, socket_listen.m_psi,
+                                        PSI_SOCKET_CONNECT, (size_t)0, src_file, src_line);
+
+    /* Instrumented code */
+    socket_accept.fd= accept(socket_listen.fd, addr, &addr_length);
+
+    /* Instrumentation end */
+    PSI_CALL(end_socket_wait)(locker, (size_t)0);
+  }
+  else
+#endif
+  {
+    /* Non instrumented code */
+    socket_accept.fd= accept(socket_listen.fd, addr, &addr_length);
+  }
 
-  /* Instrumented code */
-  socket_accept.fd= accept(socket_listen.fd, addr, &addr_length);
-
-  /* Instrumentation end */
 #ifdef HAVE_PSI_SOCKET_INTERFACE
-  PSI_CALL(end_socket_wait)(locker, (size_t)0);
-
   /* Initialize the instrument with the new socket descriptor and address */
   socket_accept.m_psi=
             PSI_CALL(init_socket)(key, (const my_socket*)&socket_accept.fd);
 
-  PSI_CALL(set_socket_info)(socket_accept.m_psi, &socket_accept.fd, addr,
-                            addr_length);
+  /* FIXME: simplify this with just 1 call to init_socket(). */
+  if (socket_accept.m_psi != NULL)
+    PSI_CALL(set_socket_info)(socket_accept.m_psi, &socket_accept.fd, addr,
+                              addr_length);
 #endif
 
   return socket_accept;
@@ -959,24 +1043,30 @@ inline_mysql_socket_close
 {
   int result;
 
-  /* Instrumentation start */
 #ifdef HAVE_PSI_SOCKET_INTERFACE
-  struct PSI_socket_locker *locker;
-  PSI_socket_locker_state state;
-  locker= PSI_CALL(start_socket_wait)(&state, mysql_socket.m_psi,
-                                      PSI_SOCKET_CLOSE, (size_t)0, src_file, src_line);
+  if (mysql_socket.m_psi != NULL)
+  {
+    /* Instrumentation start */
+    PSI_socket_locker *locker;
+    PSI_socket_locker_state state;
+    locker= PSI_CALL(start_socket_wait)(&state, mysql_socket.m_psi,
+                                        PSI_SOCKET_CLOSE, (size_t)0, src_file, src_line);
+
+    /* Instrumented code */
+    result= closesocket(mysql_socket.fd);
+
+    /* Instrumentation end */
+    PSI_CALL(end_socket_wait)(locker, (size_t)0);
+    /* Remove the instrumentation for this socket. */
+    PSI_CALL(destroy_socket)(mysql_socket.m_psi);
+
+    return result;
+  }
 #endif
 
-  /* Instrumented code */
+  /* Non instrumented code */
   result= closesocket(mysql_socket.fd);
 
-  /* Instrumentation end */
-#ifdef HAVE_PSI_SOCKET_INTERFACE
-  PSI_CALL(end_socket_wait)(locker, (size_t)0);
-  /* Remove the instrumentation for this socket. */
-  PSI_CALL(destroy_socket)(mysql_socket.m_psi);
-#endif
-
   return result;
 }
 
@@ -994,20 +1084,26 @@ inline_mysql_socket_shutdown
 
   /* Instrumentation start */
 #ifdef HAVE_PSI_SOCKET_INTERFACE
-  struct PSI_socket_locker *locker;
-  PSI_socket_locker_state state;
-  locker= PSI_CALL(start_socket_wait)(&state, mysql_socket.m_psi,
-                                      PSI_SOCKET_SHUTDOWN, (size_t)0, src_file, src_line);
-#endif
+  if (mysql_socket.m_psi != NULL)
+  {
+    PSI_socket_locker *locker;
+    PSI_socket_locker_state state;
+    locker= PSI_CALL(start_socket_wait)(&state, mysql_socket.m_psi,
+                                        PSI_SOCKET_SHUTDOWN, (size_t)0, src_file, src_line);
 
-  /* Instrumented code */
-  result= shutdown(mysql_socket.fd, how);
+    /* Instrumented code */
+    result= shutdown(mysql_socket.fd, how);
 
-  /* Instrumentation end */
-#ifdef HAVE_PSI_SOCKET_INTERFACE
-  PSI_CALL(end_socket_wait)(locker, (size_t)0);
+    /* Instrumentation end */
+    PSI_CALL(end_socket_wait)(locker, (size_t)0);
+
+    return result;
+  }
 #endif
 
+  /* Non instrumented code */
+  result= shutdown(mysql_socket.fd, how);
+
   return result;
 }
 

No bundle (reason: useless for push emails).
Thread
bzr push into mysql-trunk-pfs-tuning branch (marc.alff:3439 to 3440) Marc Alff11 Nov