ports/100893: Add kqueue(2) support to mysql41-server
Rauf Kuliyev
rauf at kuliyev.com
Wed Jul 26 22:10:25 UTC 2006
>Number: 100893
>Category: ports
>Synopsis: Add kqueue(2) support to mysql41-server
>Confidential: no
>Severity: non-critical
>Priority: low
>Responsible: freebsd-ports-bugs
>State: open
>Quarter:
>Keywords:
>Date-Required:
>Class: update
>Submitter-Id: current-users
>Arrival-Date: Wed Jul 26 22:10:18 GMT 2006
>Closed-Date:
>Last-Modified:
>Originator: Rauf Kuliyev
>Release: FreeBSD 6.1-RELEASE-p3
>Organization:
>Environment:
FreeBSD laptop.kuliyev.com 6.1-RELEASE-p3 FreeBSD 6.1-RELEASE-p3 #0: Mon Jul 10 11:56:26 AZST 2006 root at laptop.kuliyev.com:/usr/obj/usr/src/sys/C1110 i386
>Description:
Patch to support kqueue(2) to mysql 4.1.20 server port.
>How-To-Repeat:
>Fix:
diff -u -r databases/mysql41-server.orig/Makefile databases/mysql41-server/Makefile
--- databases/mysql41-server.orig/Makefile Thu Jun 22 15:23:04 2006
+++ databases/mysql41-server/Makefile Thu Jul 27 02:41:48 2006
@@ -59,6 +59,9 @@
.if defined(WITH_COLLATION) && ${WITH_COLLATION} != ""
CONFIGURE_ARGS+=--with-collation=${WITH_COLLATION}
.endif
+.if defined(WITH_KQUEUE)
+CFLAGS+=-DWITH_KQUEUE
+.endif
.include <bsd.port.pre.mk>
@@ -139,6 +142,7 @@
@${ECHO} " (use it if you need even more speed)."
@${ECHO} " WITHOUT_INNODB=yes Disable support for InnoDB table handler."
@${ECHO} " WITH_NDB=yes Enable support for NDB Cluster."
+ @${ECHO} " WITH_KQUEUE=yes Enable support for kqueue(2)."
@${ECHO} ""
post-patch:
diff -u -r databases/mysql41-server.orig/files/patch-sql::mysqld.cc databases/mysql41-server/files/patch-sql::mysqld.cc
--- databases/mysql41-server.orig/files/patch-sql::mysqld.cc Sun Jan 16 14:24:46 2005
+++ databases/mysql41-server/files/patch-sql::mysqld.cc Thu Jul 27 02:40:29 2006
@@ -1,6 +1,6 @@
---- sql/mysqld.cc.orig Tue Dec 14 13:40:36 2004
-+++ sql/mysqld.cc Mon Jan 10 00:28:52 2005
-@@ -128,7 +128,7 @@
+--- sql/mysqld.cc.orig Wed May 24 22:59:52 2006
++++ sql/mysqld.cc Thu Jul 27 02:18:31 2006
+@@ -133,7 +133,7 @@
#endif /* __WIN__ */
#ifdef HAVE_LIBWRAP
@@ -9,3 +9,90 @@
#include <syslog.h>
#ifdef NEED_SYS_SYSLOG_H
#include <sys/syslog.h>
+@@ -151,6 +151,10 @@
+ #define zVOLSTATE_DEACTIVE 2
+ #define zVOLSTATE_MAINTENANCE 3
+
++#ifdef WITH_KQUEUE
++#include <sys/event.h>
++#endif
++
+ #ifdef __NETWARE__
+ #include <nks/netware.h>
+ #include <nks/vm.h>
+@@ -556,6 +560,10 @@
+ static unsigned long openssl_id_function();
+ #endif /* HAVE_OPENSSL */
+
++#ifdef WITH_KQUEUE
++int kq;
++struct kevent kev;
++#endif
+
+ /* Function declarations */
+
+@@ -3664,16 +3672,38 @@
+
+ (void) my_pthread_getprio(pthread_self()); // For debugging
+
+- FD_ZERO(&clientFDs);
++#ifdef WITH_KQUEUE
++ if ((kq = kqueue()) <0) {
++ sql_print_error("mysqld: Could not get kqueue");
++ }
++#else
++ FD_ZERO(&clientFDs);
++#endif
++
+ if (ip_sock != INVALID_SOCKET)
+ {
+- FD_SET(ip_sock,&clientFDs);
++#ifdef WITH_KQUEUE
++ EV_SET(&kev, ip_sock, EVFILT_READ, EV_ADD, 0, 0, NULL);
++ if ((kevent(kq, &kev, 1, NULL, 0, NULL)) <0)
++ sql_print_error("mysqld: ip_sock kevent registration error");
++#else
++ FD_SET(ip_sock,&clientFDs);
++#endif
++
+ #ifdef HAVE_FCNTL
+ ip_flags = fcntl(ip_sock, F_GETFL, 0);
+ #endif
+ }
+ #ifdef HAVE_SYS_UN_H
++#ifdef WITH_KQUEUE
++ EV_SET(&kev, unix_sock, EVFILT_READ, EV_ADD, 0, 0, NULL);
++ if ((kevent(kq, &kev, 1, NULL, 0, NULL)) <0) {
++ sql_print_error("mysqld: unix_sock kevent registration error");
++ }
++#else
+ FD_SET(unix_sock,&clientFDs);
++#endif /* WITH_KQUEUE */
++
+ #ifdef HAVE_FCNTL
+ socket_flags=fcntl(unix_sock, F_GETFL, 0);
+ #endif
+@@ -3688,7 +3718,11 @@
+ if (select(max_used_connection,(int*) &readFDs,0,0,0) < 0)
+ continue;
+ #else
++#ifdef WITH_KQUEUE
++ if (kevent(kq, NULL, 0, &kev, 1, 0) < 0)
++#else
+ if (select((int) max_used_connection,&readFDs,0,0,0) < 0)
++#endif
+ {
+ if (socket_errno != SOCKET_EINTR)
+ {
+@@ -3707,7 +3741,11 @@
+
+ /* Is this a new connection request ? */
+ #ifdef HAVE_SYS_UN_H
++#ifdef WITH_KQUEUE
++ if (kev.ident == unix_sock)
++#else
+ if (FD_ISSET(unix_sock,&readFDs))
++#endif /* WITH_KQUEUE */
+ {
+ sock = unix_sock;
+ flags= socket_flags;
>Release-Note:
>Audit-Trail:
>Unformatted:
More information about the freebsd-ports-bugs
mailing list