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