Date: Sun, 08 Apr 2012 21:29:06 -0700 From: Timothy Beyer <beyert@cs.ucr.edu> To: FreeBSD-gnats-submit@FreeBSD.org Cc: Timothy Beyer <beyert@cs.ucr.edu> Subject: ports/166778: revise port: lang/urweb Message-ID: <87wr5pjzot.wl@fastmail.fm> Resent-Message-ID: <201204090430.q394UDnm037099@freefall.freebsd.org>
next in thread | raw e-mail | index | archive | help
>Number: 166778 >Category: ports >Synopsis: revise port: lang/urweb >Confidential: no >Severity: non-critical >Priority: low >Responsible: freebsd-ports-bugs >State: open >Quarter: >Keywords: >Date-Required: >Class: maintainer-update >Submitter-Id: current-users >Arrival-Date: Mon Apr 09 04:30:13 UTC 2012 >Closed-Date: >Last-Modified: >Originator: Timothy Beyer >Release: FreeBSD 9.0-RELEASE i386 >Organization: no organization >Environment: System: FreeBSD aeonserv.aeonnet 9.0-RELEASE FreeBSD 9.0-RELEASE #9: Fri Mar 9 00:02:30 PST 2012 root@aeonserv.aeonnet:/usr/obj/usr/src/sys/CUSTOM i386 >Description: According to the urweb developers, apparently my mutex initializer patch to files/urweb.c could potentially have deadlock issues. So, this is a more complete fix that does not have deadlock issues. Also, I got rid of files/patch-Makefile.am and files/patch-Makefile.in, since turning off -Werror is no longer required to compile. >How-To-Repeat: apply the patch and build >Fix: Apply the patch and build --- urweb.diff begins here --- Index: Makefile ================================================================== --- Makefile +++ Makefile @@ -4,10 +4,11 @@ # # $FreeBSD: ports/lang/urweb/Makefile,v 1.1 2012/04/06 14:36:30 scheidell Exp $ PORTNAME= urweb PORTVERSION= 20120329 +PORTREVISION= 1 CATEGORIES= lang www MASTER_SITES= http://www.impredicative.com/ur/ EXTRACT_SUFX= .tgz MAINTAINER= beyert@cs.ucr.edu DELETED files/patch-Makefile.am Index: files/patch-Makefile.am ================================================================== --- files/patch-Makefile.am +++ files/patch-Makefile.am @@ -1,8 +0,0 @@ ---- src/c/Makefile.am.orig 2012-03-29 08:09:43.000000000 -0700 -+++ src/c/Makefile.am 2012-04-04 00:52:39.000000000 -0700 -@@ -7,4 +7,4 @@ - liburweb_static_la_SOURCES = static.c - - AM_CPPFLAGS = -I../../include @OPENSSL_INCLUDES@ --AM_CFLAGS = -Wimplicit -Wall -Werror -Wno-format-security -Wno-deprecated-declarations -+AM_CFLAGS = -Wimplicit -Wall -Wno-format-security -Wno-deprecated-declarations DELETED files/patch-Makefile.in Index: files/patch-Makefile.in ================================================================== --- files/patch-Makefile.in +++ files/patch-Makefile.in @@ -1,11 +0,0 @@ ---- src/c/Makefile.in.orig 2012-03-29 08:09:43.000000000 -0700 -+++ src/c/Makefile.in 2012-04-04 00:52:43.000000000 -0700 -@@ -254,7 +254,7 @@ - liburweb_fastcgi_la_SOURCES = fastcgi.c - liburweb_static_la_SOURCES = static.c - AM_CPPFLAGS = -I../../include @OPENSSL_INCLUDES@ --AM_CFLAGS = -Wimplicit -Wall -Werror -Wno-format-security -Wno-deprecated-declarations -+AM_CFLAGS = -Wimplicit -Wall -Wno-format-security -Wno-deprecated-declarations - all: all-am - - .SUFFIXES: Index: files/patch-urweb.c ================================================================== --- files/patch-urweb.c +++ files/patch-urweb.c @@ -1,16 +1,54 @@ ---- src/c/urweb.c.orig 2012-03-29 08:09:43.000000000 -0700 -+++ src/c/urweb.c 2012-04-04 00:55:17.000000000 -0700 -@@ -160,12 +160,7 @@ +--- src/c/urweb.c.orig Thu Mar 29 11:23:35 2012 -0400 ++++ src/c/urweb.c Sun Apr 08 13:47:57 2012 -0700 +@@ -159,13 +159,7 @@ + static client **clients, *clients_free, *clients_used; static unsigned n_clients; - static pthread_mutex_t clients_mutex = +-static pthread_mutex_t clients_mutex = - #ifdef PTHREAD_RECURSIVE_MUTEX_INITIALIZER - PTHREAD_RECURSIVE_MUTEX_INITIALIZER - #else - PTHREAD_RECURSIVE_MUTEX_INITIALIZER_NP - #endif - ; -+PTHREAD_MUTEX_INITIALIZER; ++static pthread_mutex_t clients_mutex = PTHREAD_MUTEX_INITIALIZER; size_t uw_messages_max = SIZE_MAX; size_t uw_clients_max = SIZE_MAX; +@@ -230,20 +224,23 @@ + } + + static const char begin_msgs[] = "Content-type: text/plain\r\n\r\n"; ++static pthread_t pruning_thread; ++static int pruning_thread_initialized = 0; + + static client *find_client(unsigned id) { + client *c; +- +- pthread_mutex_lock(&clients_mutex); ++ int i_am_pruner = pruning_thread_initialized && pthread_equal(pruning_thread, pthread_self()); ++ ++ if (!i_am_pruner) pthread_mutex_lock(&clients_mutex); + + if (id >= n_clients) { +- pthread_mutex_unlock(&clients_mutex); ++ if (!i_am_pruner) pthread_mutex_unlock(&clients_mutex); + return NULL; + } + + c = clients[id]; + +- pthread_mutex_unlock(&clients_mutex); ++ if (!i_am_pruner) pthread_mutex_unlock(&clients_mutex); + return c; + } + +@@ -3291,6 +3288,8 @@ + cutoff = time(NULL) - ctx->app->timeout; + + pthread_mutex_lock(&clients_mutex); ++ pruning_thread = pthread_self(); ++ pruning_thread_initialized = 1; + + for (c = clients_used; c; c = next) { + next = c->next; --- urweb.diff ends here --- >Release-Note: >Audit-Trail: >Unformatted:
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?87wr5pjzot.wl>