On Thu, Jun 30, 2011 at 09:43:47AM -0700, Jeremy Evans wrote: > Fairly simple update. Notable additions include SSL support, filters, > config modules, better reloading support, speed improvments, many > bugfixes, and most of our patches being included upstream. > > Regress tests have one failure on both amd64 and i386, a segfault in a > gmtime call: > > GNU gdb 6.3 > Copyright 2004 Free Software Foundation, Inc. > GDB is free software, covered by the GNU General Public License, and you are > welcome to change it and/or distribute copies of it under certain conditions. > Type "show copying" to see the conditions. > There is absolutely no warranty for GDB. Type "show warranty" for details. > This GDB was configured as "i386-unknown-openbsd4.9"... > Core was generated by `dir_tests'. > Program terminated with signal 11, Segmentation fault. > Reading symbols from /usr/lib/libpthread.so.13.1...done. > Loaded symbols for /usr/lib/libpthread.so.13.1 > Reading symbols from /usr/local/lib/libzmq.so.0.0...done. > Loaded symbols for /usr/local/lib/libzmq.so.0.0 > Reading symbols from /usr/local/lib/libsqlite3.so.15.1...done. > Loaded symbols for /usr/local/lib/libsqlite3.so.15.1 > Symbols already loaded for /usr/lib/libpthread.so.13.1 > Reading symbols from /usr/lib/libc.so.58.2...done. > Loaded symbols for /usr/lib/libc.so.58.2 > Reading symbols from /usr/lib/libstdc++.so.51.0...done. > Loaded symbols for /usr/lib/libstdc++.so.51.0 > Reading symbols from /usr/lib/libssl.so.16.0...done. > Reading symbols from /usr/lib/libcrypto.so.19.0...done. > Loaded symbols for /usr/lib/libcrypto.so.19.0 > Reading symbols from /usr/lib/libm.so.5.3...done. > Loaded symbols for /usr/lib/libm.so.5.3 > Reading symbols from /usr/libexec/ld.so...done. > Loaded symbols for /usr/libexec/ld.so > #0 tzload (name=0x2ead12a0 "GMT", sp=0x2eaf82a0, doextend=1) at > /usr/src/lib/libc/time/localtime.c:332 > 332 { > (gdb) bt > #0 tzload (name=0x2ead12a0 "GMT", sp=0x2eaf82a0, doextend=1) at > /usr/src/lib/libc/time/localtime.c:332 > #1 0x0eb6b3cc in gmtload (sp=0x2eaf82a0) at > /usr/src/lib/libc/time/localtime.c:1161 > #2 0x0eb6b495 in gmtsub (timep=0x7f0a8854, offset=0, tmp=0x84b00280) at > /usr/src/lib/libc/time/localtime.c:1402 > #3 0x0eb6b501 in gmtime_r (timep=0x7f0a8854, p_tm=0x84b00280) at > /usr/src/lib/libc/time/localtime.c:1437 > #4 0x0eb6bb1f in gmtime (timep=0x7f0a8854) at > /usr/src/lib/libc/time/localtime.c:1450 > #5 0x1c00cf64 in Dir_find_file (path=0x7f685060, default_type=0x7f685050) at > src/dir.c:111 > #6 0x1c00326d in test_Dir_find_file () at tests/dir_tests.c:12 > #7 0x1c00331d in all_tests () at tests/dir_tests.c:172 > #8 0x1c0034c9 in taskmain (argc=1, argv=0xcfbe04f8) at tests/dir_tests.c:181 > #9 0x1c009328 in taskmainstart (v=0x0) at src/task/task.c:325 > #10 0x1c009044 in taskstart (y=2092347392, x=0) at src/task/task.c:37 > #11 0x00000000 in ?? () > > Not sure if that's a bug in the test code or a bug in our gmtime > implementation, though. Simple testing with a ruby application using > rack-mongrel2 shows no errors. > > I plan to commit this next week unless I hear objections. > > Jeremy Can you isolate the testcase to the smallest code that crashes? That would be easier to debug and diagnoze. > Index: Makefile > =================================================================== > RCS file: /cvs/ports/www/mongrel2/Makefile,v > retrieving revision 1.2 > diff -u -p -r1.2 Makefile > --- Makefile 16 Apr 2011 10:45:09 -0000 1.2 > +++ Makefile 30 Jun 2011 16:21:42 -0000 > @@ -2,10 +2,11 @@ > > # Some assembly required > ONLY_FOR_ARCHS =i386 amd64 > +SHARED_ONLY = Yes > > COMMENT = language agnostic asynchronous web server > > -DISTNAME = mongrel2-1.5 > +DISTNAME = mongrel2-1.7.5 > CATEGORIES = www > > HOMEPAGE = http://mongrel2.org/ > @@ -25,7 +26,9 @@ LIB_DEPENDS = net/zeromq \ > databases/sqlite3 > > USE_GMAKE = Yes > -ALL_TARGET = openbsd > +MAKE_ARGS = OPTFLAGS="-I${LOCALBASE}/include" \ > + OPTLIBS="-L${LOCALBASE}/lib" > +ALL_TARGET = openbsd filters config_modules ${MAKE_ARGS} > > EXAMPLE_DIR = ${PREFIX}/share/examples/mongrel2 > > @@ -37,6 +40,6 @@ post-install: > tar -cf - -C ${WRKSRC}/examples . | tar -xf - -C ${EXAMPLE_DIR} > chown -R ${SHAREOWN}:${SHAREGRP} ${EXAMPLE_DIR} > > -REGRESS_TARGET = tests > +REGRESS_TARGET = tests ${MAKE_ARGS} > > .include <bsd.port.mk> > Index: distinfo > =================================================================== > RCS file: /cvs/ports/www/mongrel2/distinfo,v > retrieving revision 1.1.1.1 > diff -u -p -r1.1.1.1 distinfo > --- distinfo 1 Apr 2011 22:28:02 -0000 1.1.1.1 > +++ distinfo 30 Jun 2011 15:24:19 -0000 > @@ -1,5 +1,5 @@ > -MD5 (mongrel2-1.5.tar.bz2) = tpn/x++SKtfXA/zTmol5EA== > -RMD160 (mongrel2-1.5.tar.bz2) = crwmKxVWs+1qCmBYXA1/QoXX7rI= > -SHA1 (mongrel2-1.5.tar.bz2) = 8XnBFwJVbta/EP4JK6ek4c3OLGc= > -SHA256 (mongrel2-1.5.tar.bz2) = dCkENkynUXIJj4KNVOTYdpTDgeChZgNVfcXz4CGGizM= > -SIZE (mongrel2-1.5.tar.bz2) = 733493 > +MD5 (mongrel2-1.7.5.tar.bz2) = wkPvxZ5Zcvo4G9E6fur9xw== > +RMD160 (mongrel2-1.7.5.tar.bz2) = 5iO7F6Qt+lCdnRTBIIuPtgR/IqI= > +SHA1 (mongrel2-1.7.5.tar.bz2) = RWVh/gTxwO5KmWz8nerauMV+5tw= > +SHA256 (mongrel2-1.7.5.tar.bz2) = > SOSzuolZvgAeW6x14KP+5ijJF7CPEVvgi81TSKxmOwE= > +SIZE (mongrel2-1.7.5.tar.bz2) = 745357 > Index: patches/patch-Makefile > =================================================================== > RCS file: /cvs/ports/www/mongrel2/patches/patch-Makefile,v > retrieving revision 1.1.1.1 > diff -u -p -r1.1.1.1 patch-Makefile > --- patches/patch-Makefile 1 Apr 2011 22:28:02 -0000 1.1.1.1 > +++ patches/patch-Makefile 30 Jun 2011 15:50:56 -0000 > @@ -1,41 +1,32 @@ > $OpenBSD: patch-Makefile,v 1.1.1.1 2011/04/01 22:28:02 jeremy Exp $ > ---- Makefile.orig Sun Jan 9 15:18:13 2011 > -+++ Makefile Fri Feb 25 08:40:22 2011 > -@@ -11,7 +11,7 @@ LIB_OBJ=$(filter-out src/mongrel2.o,${OBJECTS}) > - TEST_SRC=$(wildcard tests/*.c) > +--- Makefile.orig Wed Jun 22 09:25:12 2011 > ++++ Makefile Thu Jun 30 08:50:40 2011 > +@@ -1,5 +1,5 @@ > + CFLAGS=-g -O2 -Wall -Wextra -Isrc -pthread -rdynamic -DNDEBUG $(OPTFLAGS) > -D_FILE_OFFSET_BITS=64 > +-LIBS=-lzmq -ldl -lsqlite3 $(OPTLIBS) > ++LIBS=-lzmq -lsqlite3 $(OPTLIBS) > + PREFIX?=/usr/local > + > + get_objs = $(addsuffix .o,$(basename $(wildcard $(1)))) > +@@ -16,7 +16,7 @@ TEST_SRC=$(wildcard tests/*_tests.c) > TESTS=$(patsubst %.c,%,${TEST_SRC}) > + MAKEOPTS=OPTFLAGS="${NOEXTCFLAGS} ${OPTFLAGS}" OPTLIBS="${OPTLIBS}" > LIBS="${LIBS}" DESTDIR="${DESTDIR}" PREFIX="${PREFIX}" > > -all: bin/mongrel2 tests m2sh > +all: bin/mongrel2 m2sh > > - dev: CFLAGS=-g -Wall -Isrc -Wall -Wextra $(OPTFLAGS) > + dev: CFLAGS=-g -Wall -Isrc -Wall -Wextra $(OPTFLAGS) -D_FILE_OFFSET_BITS=64 > dev: all > -@@ -43,6 +43,8 @@ pristine: clean > - ${MAKE} -C tools/m2sh pristine > - > - .PHONY: tests > -+tests: OPTFLAGS=-I${LOCALBASE}/include > -+tests: OPTLIBS=-L${LOCALBASE}/lib -pthread > - tests: build/libm2.a tests/config.sqlite ${TESTS} > - sh ./tests/runtests.sh > - > -@@ -66,7 +68,7 @@ check: > - m2sh: > - ${MAKE} OPTFLAGS="${OPTFLAGS}" OPTLIBS="${OPTLIBS}" -C tools/m2sh all > - > --install: all install-bin install-m2sh > -+install: install-bin install-m2sh > - > - install-bin: > - install -d $(PREFIX)/bin/ > -@@ -113,8 +115,8 @@ freebsd: OPTFLAGS=-I/usr/local/include > - freebsd: OPTLIBS=-L/usr/local/lib -pthread > - freebsd: all > - > --openbsd: OPTFLAGS=-l/usr/local/include > --openbsd: OPTLIBS=-L/usr/local/lib -pthread > -+openbsd: OPTFLAGS=-I${LOCALBASE}/include > -+openbsd: OPTLIBS=-L${LOCALBASE}/lib -pthread > - openbsd: all > - > - solaris: OPTFLAGS=-I/usr/local/include > +@@ -93,9 +93,9 @@ filters: build/libm2.a > + config_modules: build/libm2.a > + ${MAKE} ${MAKEOPTS} -C tools/config_modules all > + > +-install: all > +- install -d $(DESTDIR)/$(PREFIX)/bin/ > +- install bin/mongrel2 $(DESTDIR)/$(PREFIX)/bin/ > ++install: > ++ install -d $(PREFIX)/bin/ > ++ install bin/mongrel2 $(PREFIX)/bin/ > + ${MAKE} ${MAKEOPTS} -C tools/m2sh install > + ${MAKE} ${MAKEOPTS} -C tools/config_modules install > + ${MAKE} ${MAKEOPTS} -C tools/filters install > Index: patches/patch-src_bsd_specific_c > =================================================================== > RCS file: patches/patch-src_bsd_specific_c > diff -N patches/patch-src_bsd_specific_c > --- patches/patch-src_bsd_specific_c 1 Apr 2011 22:28:02 -0000 1.1.1.1 > +++ /dev/null 1 Jan 1970 00:00:00 -0000 > @@ -1,57 +0,0 @@ > -$OpenBSD: patch-src_bsd_specific_c,v 1.1.1.1 2011/04/01 22:28:02 jeremy Exp $ > ---- src/bsd_specific.c.orig Sun Jan 9 15:18:13 2011 > -+++ src/bsd_specific.c Fri Feb 25 08:29:53 2011 > -@@ -71,10 +71,52 @@ error: > - > - #else > - > -+extern int fdrecv(int fd, void *buf, int n); > -+extern int fdsend(int fd, void *buf, int n); > -+ > -+#define BSD_SENDFILE_BUF_SIZE 16384 > -+#include <unistd.h> > -+ > - /** For the BSDs without sendfile like open and net.**/ > - > - int bsd_sendfile(int out_fd, int in_fd, off_t *offset, size_t count) { > -- return -1; > -+ char buf[BSD_SENDFILE_BUF_SIZE]; > -+ int tot, cur, rem, sent; > -+ int ret = -1; > -+ off_t orig_offset; > -+ > -+ if (offset != NULL) { > -+ orig_offset = lseek(in_fd, 0, SEEK_CUR); > -+ check(orig_offset >= 0, "lseek failure when determining current > position"); > -+ check(lseek(in_fd, *offset, SEEK_SET) >= 0, "lseek failure when > setting new position"); > -+ } > -+ > -+ for (tot = 0, rem = count, cur = rem; cur != 0 && tot < count; tot += > cur, rem -= cur) { > -+ if (rem >= BSD_SENDFILE_BUF_SIZE) { > -+ cur = BSD_SENDFILE_BUF_SIZE; > -+ } else { > -+ cur = rem; > -+ } > -+ > -+ cur = fdread(in_fd, buf, cur); > -+ check(cur >= 0, "Internal sendfile emulation failed: fdread: %i", cur); > -+ > -+ if (cur != 0) { > -+ sent = fdwrite(out_fd, buf, cur); > -+ check(sent == cur, "Internal sendfile emulation failed: fdread: %i, > fdwrite: %i", cur, sent); > -+ } > -+ } > -+ > -+ ret = tot; > -+ > -+error: > -+ if (offset != NULL) { > -+ if (ret != -1) { > -+ *offset += tot; > -+ } > -+ lseek(in_fd, orig_offset, SEEK_SET); > -+ } > -+ return ret; > - } > - > - #endif > Index: patches/patch-src_io_h > =================================================================== > RCS file: patches/patch-src_io_h > diff -N patches/patch-src_io_h > --- patches/patch-src_io_h 1 Apr 2011 22:28:02 -0000 1.1.1.1 > +++ /dev/null 1 Jan 1970 00:00:00 -0000 > @@ -1,12 +0,0 @@ > -$OpenBSD: patch-src_io_h,v 1.1.1.1 2011/04/01 22:28:02 jeremy Exp $ > ---- src/io.h.orig Thu Feb 24 11:30:31 2011 > -+++ src/io.h Thu Feb 24 11:31:51 2011 > -@@ -86,7 +86,7 @@ int IOBuf_stream_file(IOBuf *buf, int fd, int len); > - > - #define IOBuf_fd(I) ((I)->fd) > - > --#if defined(__APPLE__) || defined(__FreeBSD__) || defined(__NetBSD__) > -+#if defined(__APPLE__) || defined(__FreeBSD__) || defined(__NetBSD__) || > defined(__OpenBSD__) > - #define Dir_send bsd_sendfile > - #else > - #define Dir_send sendfile > Index: patches/patch-src_polarssl_net_c > =================================================================== > RCS file: patches/patch-src_polarssl_net_c > diff -N patches/patch-src_polarssl_net_c > --- /dev/null 1 Jan 1970 00:00:00 -0000 > +++ patches/patch-src_polarssl_net_c 30 Jun 2011 15:27:13 -0000 > @@ -0,0 +1,12 @@ > +$OpenBSD$ > +--- src/polarssl/net.c.orig Thu Jun 30 08:27:01 2011 > ++++ src/polarssl/net.c Thu Jun 30 08:27:02 2011 > +@@ -59,7 +59,7 @@ static int wsa_init_done = 0; > + #include <netdb.h> > + #include <errno.h> > + > +-#if defined(__FreeBSD__) > ++#if defined(__FreeBSD__) || defined(__OpenBSD__) > + #include <sys/endian.h> > + #elif defined(__APPLE__) > + #include <machine/endian.h> > Index: patches/patch-src_task_asm_S > =================================================================== > RCS file: patches/patch-src_task_asm_S > diff -N patches/patch-src_task_asm_S > --- patches/patch-src_task_asm_S 1 Apr 2011 22:28:02 -0000 1.1.1.1 > +++ /dev/null 1 Jan 1970 00:00:00 -0000 > @@ -1,21 +0,0 @@ > -$OpenBSD: patch-src_task_asm_S,v 1.1.1.1 2011/04/01 22:28:02 jeremy Exp $ > ---- src/task/asm.S.orig Thu Feb 24 13:03:43 2011 > -+++ src/task/asm.S Thu Feb 24 13:05:01 2011 > -@@ -6,10 +6,16 @@ > - #define GET getmcontext > - #endif > - > --#if defined(__OpenBSD__) && defined(__i386__) > -+#if defined(__OpenBSD__) > -+#if defined(__i386__) > - #define NEEDX86CONTEXT 1 > - #define SET setmcontext > - #define GET getmcontext > -+#elif defined(__x86_64__) > -+#define NEEDAMD64CONTEXT 1 > -+#define SET setmcontext > -+#define GET getmcontext > -+#endif > - #endif > - > - #if defined(__APPLE__) > Index: patches/patch-src_task_context_c > =================================================================== > RCS file: patches/patch-src_task_context_c > diff -N patches/patch-src_task_context_c > --- patches/patch-src_task_context_c 1 Apr 2011 22:28:02 -0000 1.1.1.1 > +++ /dev/null 1 Jan 1970 00:00:00 -0000 > @@ -1,19 +0,0 @@ > -$OpenBSD: patch-src_task_context_c,v 1.1.1.1 2011/04/01 22:28:02 jeremy Exp $ > ---- src/task/context.c.orig Sun Jan 9 15:18:13 2011 > -+++ src/task/context.c Thu Feb 24 12:36:11 2011 > -@@ -20,9 +20,14 @@ > - #define NEEDSWAPCONTEXT > - #endif > - > --#if defined(__OpenBSD__) && defined(__i386__) > -+#if defined(__OpenBSD__) > -+#if defined(__i386__) > - #define NEEDX86MAKECONTEXT > - #define NEEDSWAPCONTEXT > -+#elif defined(__x86_64__) > -+#define NEEDAMD64MAKECONTEXT > -+#define NEEDSWAPCONTEXT > -+#endif > - #endif > - > - #if defined(__linux__) && defined(__arm__) > Index: patches/patch-src_task_taskimpl_h > =================================================================== > RCS file: patches/patch-src_task_taskimpl_h > diff -N patches/patch-src_task_taskimpl_h > --- patches/patch-src_task_taskimpl_h 1 Apr 2011 22:28:02 -0000 1.1.1.1 > +++ /dev/null 1 Jan 1970 00:00:00 -0000 > @@ -1,12 +0,0 @@ > -$OpenBSD: patch-src_task_taskimpl_h,v 1.1.1.1 2011/04/01 22:28:02 jeremy Exp > $ > ---- src/task/taskimpl.h.orig Thu Feb 24 12:21:50 2011 > -+++ src/task/taskimpl.h Thu Feb 24 12:22:11 2011 > -@@ -88,6 +88,8 @@ extern void makecontext(ucontext_t*, void(*) > - # define ucontext_t libthread_ucontext_t > - # if defined __i386__ > - # include "386-ucontext.h" > -+# elif defined(__x86_64__) > -+# include "amd64-ucontext.h" > - # else > - # include "power-ucontext.h" > - # endif > Index: pkg/PLIST > =================================================================== > RCS file: /cvs/ports/www/mongrel2/pkg/PLIST,v > retrieving revision 1.1.1.1 > diff -u -p -r1.1.1.1 PLIST > --- pkg/PLIST 1 Apr 2011 22:28:02 -0000 1.1.1.1 > +++ pkg/PLIST 30 Jun 2011 15:52:26 -0000 > @@ -1,7 +1,14 @@ > @comment $OpenBSD: PLIST,v 1.1.1.1 2011/04/01 22:28:02 jeremy Exp $ > @bin bin/m2sh > @bin bin/mongrel2 > +lib/mongrel2/ > +lib/mongrel2/config_modules/ > +lib/mongrel2/config_modules/null.so > +lib/mongrel2/config_modules/zmq.so > +lib/mongrel2/filters/ > +lib/mongrel2/filters/null.so > share/examples/mongrel2/ > +share/examples/mongrel2/.dexy > share/examples/mongrel2/bbs/ > share/examples/mongrel2/bbs/bbs.lua > share/examples/mongrel2/bbs/client.py > @@ -55,6 +62,7 @@ share/examples/mongrel2/configs/any.conf > share/examples/mongrel2/configs/complex.conf > share/examples/mongrel2/configs/mongrel2.conf > share/examples/mongrel2/configs/multi.conf > +share/examples/mongrel2/configs/multi_handler.conf > share/examples/mongrel2/configs/sample.conf > share/examples/mongrel2/http_0mq/ > share/examples/mongrel2/http_0mq/http.py > @@ -104,10 +112,12 @@ share/examples/mongrel2/python/mongrel2/ > share/examples/mongrel2/python/mongrel2/config/commands.py > share/examples/mongrel2/python/mongrel2/config/model.py > share/examples/mongrel2/python/mongrel2/config/rc.py > +share/examples/mongrel2/python/mongrel2/control.py > share/examples/mongrel2/python/mongrel2/handler.py > share/examples/mongrel2/python/mongrel2/request.py > share/examples/mongrel2/python/mongrel2/sql/ > share/examples/mongrel2/python/mongrel2/sql/config.sql > +share/examples/mongrel2/python/mongrel2/tnetstrings.py > share/examples/mongrel2/python/setup.py > share/examples/mongrel2/python/tests/ > share/examples/mongrel2/python/tests/__init__.py >
-- Cheers, Jasper "Capable, generous men do not create victims, they nurture them."