r4818 - in trunk/varnish-cache: include lib/libvarnish

phk at varnish-cache.org phk at varnish-cache.org
Wed May 19 09:32:28 CEST 2010


Author: phk
Date: 2010-05-19 09:32:27 +0200 (Wed, 19 May 2010)
New Revision: 4818

Added:
   trunk/varnish-cache/include/vmb.h
   trunk/varnish-cache/lib/libvarnish/vmb.c
Modified:
   trunk/varnish-cache/lib/libvarnish/Makefile.am
Log:
Face the music and do memory barriers sensibly.

This really belongs in POSIX pthreads :-(



Added: trunk/varnish-cache/include/vmb.h
===================================================================
--- trunk/varnish-cache/include/vmb.h	                        (rev 0)
+++ trunk/varnish-cache/include/vmb.h	2010-05-19 07:32:27 UTC (rev 4818)
@@ -0,0 +1,51 @@
+/*-
+ * Copyright (c) 2010 Redpill Linpro AS
+ * All rights reserved.
+ *
+ * Author: Poul-Henning Kamp <phk at phk.freebsd.dk>
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL AUTHOR OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ *
+ * $Id$
+ *
+ * Memory barriers
+ *
+ */
+
+#ifndef VMB_H_INCLUDED
+#define VMB_H_INCLUDED
+
+void vmb_pthread(void);
+
+#if defined(__FreeBSD__)
+#include <sys/types.h>
+#include <machine/atomic.h>
+#define VMB()		mb()
+#define VWMB()		wmb()
+#define VRMB()		rmb()
+#else
+#define VMB()		vmb_pthread()
+#define VWMB()		vmb_pthread()
+#define VRMB()		vmb_pthread()
+#endif
+
+#endif /* VMB_H_INCLUDED */

Modified: trunk/varnish-cache/lib/libvarnish/Makefile.am
===================================================================
--- trunk/varnish-cache/lib/libvarnish/Makefile.am	2010-05-19 07:07:15 UTC (rev 4817)
+++ trunk/varnish-cache/lib/libvarnish/Makefile.am	2010-05-19 07:32:27 UTC (rev 4818)
@@ -24,6 +24,7 @@
 	vev.c \
 	vin.c \
 	vlu.c \
+	vmb.c \
 	vpf.c \
 	vre.c \
 	vsb.c \

Added: trunk/varnish-cache/lib/libvarnish/vmb.c
===================================================================
--- trunk/varnish-cache/lib/libvarnish/vmb.c	                        (rev 0)
+++ trunk/varnish-cache/lib/libvarnish/vmb.c	2010-05-19 07:32:27 UTC (rev 4818)
@@ -0,0 +1,52 @@
+/*-
+ * Copyright (c) 2010 Redpill Linpro AS
+ * All rights reserved.
+ *
+ * Author: Poul-Henning Kamp <phk at phk.freebsd.dk>
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL AUTHOR OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+#include <pthread.h>
+#include "libvarnish.h"
+#include "vmb.h"
+
+static pthread_mutex_t	mb_mtx;
+static pthread_once_t	mb_mtx_once = PTHREAD_ONCE_INIT;
+
+static void
+vmb_init(void)
+{
+
+	AZ(pthread_mutex_init(&mb_mtx, NULL));
+}
+
+
+void
+vmb_pthread(void)
+{
+
+	AZ(pthread_once(&mb_mtx_once, vmb_init));
+
+	AZ(pthread_mutex_lock(&mb_mtx));
+	AZ(pthread_mutex_unlock(&mb_mtx));
+}




More information about the varnish-commit mailing list